在循环中构建嵌套JSON

时间:2017-04-11 04:48:37

标签: java json

我正在尝试构建以下类型的JSON对象

[
  {"Value":0,"Cities":["London","Tokyo","Washington"],"Name":"John"},
  {"Value":1,"Cities":["London","Tokyo","Washington"],"Name":"John"},
  {"Value":2,"Cities":["London","Tokyo","Washington"],"Name":"John"}
]

这是我到目前为止所做的。 JSON对象是用最后一个条目写的。

   JSONArray outer = new JSONArray();
        JSONObject js = new JSONObject();
        List<String> str = new ArrayList<String>();
        str.add("London");
        str.add("Tokyo");
        str.add("Washington");

        int res = 3;


        for(int i=0;i<res;i++){
            js.put("Value", i);
            js.put("Name", "John");
            js.put("Cities", str);
            outer.add(js);          
        }           
        System.out.println(outer);

我现在得到的是:

  [
    {"Value":2,"Cities":["London","Tokyo","Washington"],"Name":"John"},
    {"Value":2,"Cities":["London","Tokyo","Washington"],"Name":"John"},
    {"Value":2,"Cities":["London","Tokyo","Washington"],"Name":"John"}
  ]

2 个答案:

答案 0 :(得分:2)

每次创建一个新的JSONObject,循环中。

JSONArray outer = new JSONArray();
    JSONObject js = null;
    List<String> str = new ArrayList<String>();
    str.add("London");
    str.add("Tokyo");
    str.add("Washington");

    int res = 3;


    for(int i=0;i<res;i++){
        js= new JSONObject();
        js.put("Value", i);
        js.put("Name", "John");
        js.put("Cities", str);
        outer.add(js);          
    }           
    System.out.println(outer);

此外,如果在任何时候更改城市,您可能会遇到同样的问题,因此除非它们始终保持所需的三个,否则为每个对象创建一个新列表。

答案 1 :(得分:0)

您需要为每个Value,Name,Cities对创建新的JSON对象。 所以你需要把它放在第二个for循环中。喜欢这个

for(int i=0;i<res;i++){
        js= new JSONObject();