无论名称如何,都可以解析JsonObject的字段

时间:2014-04-25 13:37:13

标签: android json gson

我一直在寻找这个问题,但是无法在SO或文档中的任何地方找到它。 我正在使用Gson解析json文件,并假设该文件是:

{
    "animal":"cat",
    "paws":"4",
    "eyes":"2"
}

现在,由于所有字段都是字符串,我想将其解析为字符串数组,我想要这样的内容:

{"cat","4","2"}

我想解析JsonObject,无论其标签的名称是什么,以及问题所在。我可以保证json只包含字符串,但我不清楚这些字段的名称。

有人遇到过这个问题吗?任何帮助都非常感谢,也有任何研究方向。

修改

从回答中,我设法做到了这样:

for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
    // do your stuff here
}

,如this answer

中所述

4 个答案:

答案 0 :(得分:1)

JSONObject使用keys()方法返回Iterator<String>。通过迭代器,您可以检索与每个键关联的值。 Here文档

编辑:  由于您使用的是GSON,因此您可以通过方法entrySet()

检索密钥

答案 1 :(得分:1)

您应该使用Iterator,通过拨打.keys()上的JSONObject即可获得该org.json。我觉得这样的事情应该有用(使用String[] output = new String[jsonObject.length()]; Iterator iterator = jsonObject.keys(); int i = 0; while (iterator.hasNext()){ output[i++] = jsonObject.optString((String) iterator.next()); } 库):

GSON

编辑好的,如果是Set<Map.Entry<String, JsonElement>> set = jsonObject.entrySet(); String[] out = new String[set.size()]; int i = 0; for (Map.Entry<String, JsonElement> x : set){ out[i++] = x.getValue().toString(); } ,就会出现这样的情况:

{{1}}

答案 2 :(得分:1)

如果您使用的是gson,那么简单的解决方案就是:

Type mapType = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> map = gson.fromJson(YOUR_JSON_STRING, mapType);
// get only values from map
Collection<String> values = map.values();

for (String string : values) {
  // do your stuff here
}

结果值集合包含

[cat, 4, 2]

答案 3 :(得分:0)

 JSONObject jsonObject = new JSONObject(parentJson.getJSONObject("objectname")
            .toString());
 Iterator<?> iter = jsonObject.keys();
        while (iter.hasNext()) {
  String key =(String) iter.next();
  String value =  jsonObject.getString(key);
}