从Java中的JSON对象中的数组获取价值?

时间:2019-04-17 22:38:13

标签: java api

我对Java中的REST API调用还很陌生,并且在尝试从JSON对象(如下)获取“ item”部分时遇到了问题。我想这也使我感到困惑,“响应”也是数组中的对象吗?/

JSON文件如下:

{
"version": "1.0",
"code": 200,
"request":{"text":["seafood" ], "lang": "en", "type": "stimulus"},
"response":[{
    "text": "seafood",
    "items":[
         {"item": "Shrimp", "weight": 100, "pos": "noun" }, 
         {"item": "Lobster",…
     ]
}]
}

我目前已设法使用以下方法获取对象的“响应”部分:

BufferedReader in = new BufferedReader( 
    new InputStreamReader(conection.getInputStream()));
StringBuffer json = new StringBuffer();
while ((readLine = in.readLine()) != null) {
    json.append(readLine);
} 
in.close();
JSONParser parser = new JSONParser();
try{
    JSONObject object= (JSONObject) parser.parse(json.toString());
    Object response = json.get("response");
...

到目前为止,我被卡住了。我不知道该如何处理“响应”以获取“项目”,如果我尝试将“响应”转换为JSONObject,它将返回为null?

我想尝试做的是将“项目”部分中的每个“项目”都放入列表中。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我认为它应该起作用:

JSONParser parser = new JSONParser();
try{
    JSONObject object= (JSONObject) parser.parse(json.toString());
    JSONArray response = object.getJSONArray("response");
    JSONObject responseObject = response.getJSONObject(0);
    JSONArray expectedArray = responseObject.getJSONArray("items");
    for (int i = 0; i < expectedArray.length(); i++) {
        String item = expectedArray.getJSONObject(i).getString("item");
        String weight = expectedArray.getJSONObject(i).getInt("weight");
        ......
        //Here you can create your custom object and add to your array. For example
        list.add(new MyOwnObject(item, weight));
    }
....

因为响应是数组,而不是对象

答案 1 :(得分:-1)

您应该选中the documentation for JSONObject。它描述了所有可用的方法。请注意,没有名为get()的方法。相反,您可能想使用getJSONArray()