2014-02-10 76 views
0

我有Spring MVC應用程序。Java-設置接口 - 按順序解析JSON字符串

我有以下的JSON字符串從客戶端發送

{ 
    "cfgName": "Name", 
    "cfgfieldses": [ 
    { 
     "cfgsName": "form.0", 
     "cfgValue": "someVal" 
    }, 
    { 
     "cfgsName": "form.2", 
     "cfgValue": "hello" 
    }, 
    { 
     "cfgsName": "form.3", 
     "cfgValue": "fname" 
    }, 
    { 
     "cfgsName": "form.1", 
     "cfgValue": "how?" 
    } 
    ] 
} 

我有兩個類解析這個

Config.java

public class Config implements Serializable { 
    private String cfgName; 
    private Set<CfgFields> cfgFieldses = new HashSet<CfgFields>(0); 

    //getters and setters 
} 

CfgFields.java

public class CfgFields implements Serializable { 
    private String cfgsName; 
    private String cfgValue; 

    //getters and setters 
} 

這裏是我的控制器

public void saveConfig(@RequestBody Config config) { 
    System.out.println(config.getCfgName()); 
    for (Cfgfields cfgfields: config.getCfgFieldses()) { 
     System.out.println(cfgfields.getCfgsName()); 
    } 
} 

cfgfieldses是不是爲了我得到,因爲它是Set。這是我得到的輸出。

Name 
form.1 
form.2 
form.0 
form.3 

我想從我從客戶端發送JSON字符串的有序方式。我可以嘗試列表而不是設置。但我想知道是否有可能使用Set並以有序的方式獲取。

我的預期輸出是

Name 
form.0 
form.2 
form.3 
form.1 
+0

LinkedHashSet而不是哈希集? (LinkedHashSet保持插入的順序) – chillworld

+0

如果你需要訂單序列,你需要去列表。 – Kick

+0

@chillworld我已經嘗試了'LinkedHashSet'。但它也不起作用 – iCode

回答

0

取而代之的是HashSet,使用LinkedHashSet

HashSet不同,LinkedHashSet允許您按其插入順序對其成員進行迭代。

編輯

如果要強制在Set(例如,通過表格名稱)項的特定排序順序,使用SortedSet,像TreeSet。您需要爲您的Cfgfields課程提供自定義Comparator

+0

它不起作用。我已經試過 – iCode

+0

查看我的編輯re SortedSet –

+0

如何根據它來的順序創建自定義比較器? – iCode