使用java从JSON读取数组名称本身(而不是其内容)

时间:2017-10-03 09:14:23

标签: java json gson

我有一个像这样的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作为输出打印。

1 个答案:

答案 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
   }
}