#java #json #gson
#java #json #gson
Вопрос:
Я пытаюсь проанализировать строку 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 для java.
Моя работа состоит в том, чтобы получить значение атрибута «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 жалуется: ожидаемая СТРОКА, но была BEGIN_ARRAY, из этой строки:
String cse = gson.fromJson( obj , String.class);
есть мысли? заранее спасибо.
Комментарии:
1. Является ли это допустимой строкой JSON. Проверьте это здесь jsonlint , в котором говорится
Parse error on line 18:
2. @Braj не обязательно. Во всяком случае, у меня такое чувство, что вложенные списки (которые кажутся бесполезными) вызывают это
3. да @TimCastelijns я согласен с вами. Просто удаляю мой комментарий. Извините.
Ответ №1:
Он возвращается 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 amp; setter
}
class MyArgJson{
private double id;
private String type;
private double beg;
// getter amp; 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
}
]
}
]
]
]