将JSONArray转换为arrayList

时间:2015-05-18 14:25:21

标签: java arrays json arraylist

我试图转换JSONArray,如下所示:

{"output":["name":"Name3","URI":"Value3"},{"name":"Name5","URI":"Value5"},{"name":"Name4","URI":"Value4"}]}

转换为arrayLis t,例如Arr[0][0]的输出将为Name3

我尝试过这个解决方案:

if (outputs!= null) { 
    int len = outputs.length();
    for (int j=0;j<len;j++){ 
        list.add(outputs.get(j).toString());
    } 
} 
for (String str : list) {               
    System.out.println("Item is: " + str);              
}

但我得到了完整的一行:{"name":"Name3","URI":"Value3"}

如何获取JSONArray的每个对象?

2 个答案:

答案 0 :(得分:3)

没有指定,你使用哪个JSON解析器,所以我想你现在可以选择,我建议你使用Gson

反序列化此类结构的更好解决方案是为每个结构创建一个特殊类,例如:

public class NameURIPair {
    private String name;
    private String URI;

    // getters
}

然后可以将您的JSON反序列化为一个类,其中包含结果List

public class Data {
    private List<NameURIPair> output;

    // getter
}

// ...

Data data = new Gson(stringData, Data.class);

由于您已经请求了其他方式,您仍然可以使用JsonParser

将解析后的JSON转换为JsonElement
JsonElement root = new JsonParser().parse(stringData);

虽然我不会给你完整的解决方案,但不理解这种解决方案: - )

答案 1 :(得分:2)

Aazelix,你的Json输出似乎缺少打开数组括号。 其正确的形式如下:

{"output":[{"name":"Name3","URI":"Value3"},{"name":"Name5","URI":"Value5"},{"name":"Name4","URI":"Value4"}]}

至于转换为POJO

List<MyObj> list = new ArrayList<>();
if (outputs!= null) { 
  int len = outputs.length();
  for (int i=0; i<len; i++) { 
    JSONObject o = (JSONObject) outputs.get(i);
    list.add(new MyObj(o.getString('name'), o.getString('URL')));
  } 
} 
System.out.println("There is " + list.size() + " objects.");


public static final class MyObj {
  final String name;
  final String url;

  public MyObj(String name, String url) {
     this.name = name;
     this.url  = url;
  }
}