Java-Set接口 - 按顺序解析JSON字符串

时间:2014-02-10 10:59:25

标签: java json spring-mvc set

我有Spring MVC应用程序。

我从客户端发送了以下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

1 个答案:

答案 0 :(得分:0)

而不是HashSet,请使用LinkedHashSet

HashSet不同,它不保证其项目的顺序,LinkedHashSet允许您按照插入顺序迭代其成员。

修改

如果您要对Set中的项目强制执行特定的排序顺序(例如,通过表单名称),请使用SortedSet,例如TreeSet。您需要为Comparator课程提供自定义Cfgfields