我有一个像这样的JSON -
result = [
{ "value1": [
{
"number" : "3",
"title" : "hello_world"
},
{
"number" : "2",
"title" : "hello_world"
}
]
},
{ "value2": [
{
"number" : "4",
"title" : "hello_world"
},
{
"number" : "5",
"title" : "hello_world"
}
]
}
]
我想得到结果[0],即“value1”和结果[1],即“value2”。 下面是我解析这个Json的代码 -
JsonParser jsonParser = new JsonParser();
JsonArray resultArray = jsonParser.parse(result.getAsJsonArray("result"));
上面的代码工作正常,我得到2个Json数组。现在为了获得value1,我已经编写了这段代码 -
String v = resultArray.get(0).getAsJsonObject().get("value1").getAsString();
但这不是给我value1而不是它的抛出错误“java.lang.IllegalStateException”。我在这里做错了什么?
请注意,我想将数组名称“value1”和“value2”本身读为字符串,而不是其内容.Means打印行应将value1作为输出打印。
答案 0 :(得分:2)
Value1
不是String
,而是JsonArray
,
当你调用getAsString()
方法时,它会抛出异常,告诉你该值不是String对象。
几个选项:
1-读取值为JsonArray,然后使用toString方法将其转换为String:
String v = resultArray.get(0).getAsJsonObject().getAsJsonArray("value1").toString();
2-直接在JsonElement本身上使用toString方法(返回值为get(“value1”)
String v = resultArray.get(0).getAsJsonObject().get("value1").toString();
我通常使用选项1,因为它会强制执行检查。
修改强>
阅读注释后,基本上需要的是获取每个Object中每个JsonObject的所有键
你需要遍历数组并获取所有的entrySet()。(未经测试但应该有效)
for(JsonElement element : resultArray){
JsonObject next= element.getAsJsonObject();
for(Map.Entry<String,JsonElement> entry : next.entrySet()){
System.out.println(entry.getKey()); // <-- prints out value1 and value2
}
}