我试图解析像这样的JSON字符串(Json字符串是从在线API获得的)
[
[
[
{
"id": 0,
"number": 22,
"arg": []
},
{
"id": 1,
"number": 1,
"arg": [
{
"id": 0,
"type": "A0",
"beg": 0,
},
{
"id": 1,
"type": "A1",
"beg": 2,
}
]
}
]
]
]
我正在使用Gson库for java。 我的工作是获得"数字"的价值。属性。要做到这一点,我想我需要这样做:
jsonobject = something(???)
number = jsonobject[0][0][1]["number"]
所以我试试:
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray jArray = parser.parse(jstring).getAsJsonArray();
for(JsonElement obj : jArray )
{
String cse = gson.fromJson( obj , String.class);
System.out.println(cse);
}
然而,java抱怨:预期的STRING但是BEGIN_ARRAY ,来自这一行:
String cse = gson.fromJson( obj , String.class);
有什么想法吗?提前谢谢。
答案 0 :(得分:5)
返回ArrayList<ArrayList<ArrayList<Map<String, Object>>>>
。
Type type = new TypeToken<ArrayList<ArrayList<ArrayList<Map<String, Object>>>>>() {}.getType();
ArrayList<ArrayList<ArrayList<Map<String, Object>>>> data = gson.fromJson(json, type);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));
或者您也可以转换为JAVA对象
class MyJSONObj{
private double id;
private double number;
private List<MyArgJson> arg;
// getter & setter
}
class MyArgJson{
private double id;
private String type;
private double beg;
// getter & setter
}
Type type = new TypeToken<ArrayList<ArrayList<ArrayList<MyJSONObj>>>>() {}.getType();
ArrayList<ArrayList<ArrayList<MyJSONObj>>> data = gson.fromJson(json, type);
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(data));
输出:
[
[
[
{
"id": 0.0,
"number": 22.0,
"arg": []
},
{
"id": 1.0,
"number": 1.0,
"arg": [
{
"id": 0.0,
"type": "A0",
"beg": 0.0
},
{
"id": 1.0,
"type": "A1",
"beg": 2.0
}
]
}
]
]
]