2015-05-04 155 views
0

我需要創建常量json字符串或按鍵排序的json。常數json字符串是什麼意思?請看下面的代碼示例,我創建。如何使用gson創建按鍵排序的json?

我的代碼1:

public class GsonTest 
{ 
    class DataObject { 

     private int data1 = 100; 
     private String data2 = "hello"; 

    } 


    public static void main(String[] args) 
    { 
     GsonTest obj=new GsonTest(); 
     DataObject obj2 = obj.new DataObject(); 
     Gson gson = new Gson(); 

     String json = gson.toJson(obj2); 
     System.out.println(json); 
    } 
} 

輸出1:

{"data1":100,"data2":"hello"} 

我的代碼2:

public class GsonTest 
{ 
    class DataObject { 
     private String data2 = "hello"; 
     private int data1 = 100; 


    } 


    public static void main(String[] args) 
    { 
     GsonTest obj=new GsonTest(); 
     DataObject obj2 = obj.new DataObject(); 
     Gson gson = new Gson(); 

     String json = gson.toJson(obj2); 
     System.out.println(json); 
    } 
} 

輸出2:

{"data2":"hello","data1":100} 

如果你看到,如果切換變量(在DataObjectdata1 & data2),我得到不同的JSON。我的目標是獲得相同的json,即使有人改變了類變量的位置。當有人添加新變量時,我會得到它,json會改變。但是當變量移動時,json不應該改變。所以,我的目標是獲得標準的json,可能在同一個類的排序鍵順序。如果嵌套的json,那麼它應該在嵌套結構中排序。

預計雙方的代碼的運行輸出:

{"data1":100,"data2":"hello"} //sorted on keys!! Here keys are data1 & data2 

我明白了,我需要改變一些東西在String json = gson.toJson(obj2);行,但我必須做什麼?

爲什麼我需要它們來訂購?

我需要對json字符串進行編碼,然後將它傳遞給另一個函數。如果我改變鍵的順序,即使值保持不變,編碼值也會改變。我想避免這種情況。

+0

http://stackoverflow.com/a/4515863/669721 – Miroshko

+2

FWIW,在JSON,鍵是無序的。所以,建立依賴於任何特定順序的其他東西是一個值得懷疑的想法......除非你只是爲了美學。 – FatalError

+0

@FatalError我希望它們能夠順序排列,因爲我將是json字符串的編碼。如果鍵移動了,我的編碼會改變,我不想那樣做。有問題編輯。所以,我需要對它進行排序。 – Abhishek

回答

2

您可以嘗試將您的json反序列化爲有序映射,然後重做序列化以獲得按鍵排序的json字符串。

GsonTest obj=new GsonTest(); 
DataObject obj2 = obj.new DataObject(); 
Gson gson = new Gson(); 

String json = gson.toJson(obj2); 
TreeMap<String, Object> map = gson.fromJson(json, TreeMap.class); 
String sortedJson = gson.toJson(map); 
+0

這部分回答了我的問題。爲什麼部分?這是因爲當我嘗試嵌套json時,它沒有給我預期的嵌套結構輸出。 – Abhishek

+0

@Abhishek好吧,如果你想排序嵌套結構,也許json對象(map)不是表示的完美選擇,正如在http://stackoverflow.com/questions/4515676/keep-the-order json-keys-during-json-conversion-to-csv/4515863#4515863 – wings

+0

@Abhishek然而,如果你能給我看一個簡單的用例,也許我能夠幫助你。 – wings