我正在尝试解析像这样的 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,
}
]
}
]
]
]
我正在使用 Java 的 Gson 库。 我的工作是获取“number”属性的值。为此,我认为我需要这样做:
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 提示:Expected STRING but was BEGIN_ARRAY,来自这一行:
String cse = gson.fromJson( obj , String.class);
有什么想法吗?提前致谢。
最佳答案
它返回 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
}
]
}
]
]
]
关于java - Gson 应为 STRING 但实际为 BEGIN_ARRAY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24321975/