从JSONObject中获取键和值

11

我试图从我的JSONObject中提取键和值,但是我无法做到。这是JSON:

[{"id":["5"]},{"Tech":["Java"]}]

一开始它是一个字符串。我使用以下方式将其转换为JSONObject:

JSONObject jsonObj = new JSONObject("[{"id":["5"]},{"Tech":["Java"]}]");

然后我试图通过以下方式获取键和值:

jsonObj.getString("id");

但是它返回了空值。有人能帮我解决这个问题吗?


3
你的数据是一个 JSON 数组,不是一个 JSON 对象。 - shmosel
是的,这是一个JSON数组,您需要执行数组/字符串操作来获取id - Shyam Baitmangalkar
3个回答

12

试试这个:

try {
    JSONArray jsonArr = new JSONArray("[{\"id\":[\"5\"]},{\"Tech\":[\"Java\"]}]");

    for (int i = 0; i < jsonArr.length(); i++) {
        JSONObject jsonObj = jsonArr.getJSONObject(i);
        String k = jsonObj.keys().next();
        Log.i("Info", "Key: " + k + ", value: " + jsonObj.getString(k));
    }

} catch (JSONException ex) {
    ex.printStackTrace();
}

这里展示的JSON数据与OP提供的不同,OP提供的是[{"id":["5"]},{"Tech":["Java"]}],请注意中间的},{ - Jason C
@JasonC 是的,我注意到了。所以我为他声明了那个。 - Wajih
OP正在询问如何解析给定的JSON数据。建议他们使用不同的JSON数据似乎没有什么用处。 - Jason C

2
您发送的参数是JsonArray并引用了JsonObject。正确的方式是:
JSONObject jsonObj = new JSONObject("{'id':['5','6']},{'Tech':['Java']}");      
    System.out.println(jsonObj.getString("id"));

    JSONArray jsonArray = new JSONArray("[{'id':['5','6','7','8']},{'Tech':['Java']}]");
    System.out.println(jsonArray.length());
    for(int i=0;i<jsonArray.length();i++){
            System.out.println(jsonArray.getJSONObject(i).getString("id"));
    }

-1

因为在id处,你没有一个字符串,而是一个字符串数组,

所以不要这样做 jsonObj.getString("id");

而应该这样做

jsonObj.getArray("id"); 这将返回该数组

例如,如果你在id处有一个Json数组,则必须执行此操作

jsonObj.getJSONArray("id");


请在try和catch中添加以下代码,因为它会抛出未检查的异常。 - Vipin Chaudhary
首先,我所知道的任何 JSONObject 实现都没有定义名为 getArray 的方法;其次,getJSONArray("id") 不适用于给定的 JSON 数据,它适用于 {"id":["5"],"Tech":["Java"]} 这样的数据,而不是我们所给出的数据。 - Jason C
嗨Vipin。非常感谢你的回复。但是,它没有起效: (. 正如@JasonC所说,当我尝试使用getArray方法时,并不能获得任何结果,而且getJSONArray("id")也无法正常工作。 - user7637864

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接