在Json数组中搜索值

时间:2016-08-31 11:43:50

标签: java json parsing

我有以下json回复:

{
"elements":
[
    {
        "id": "1234",
        "Key": "1234-name2",  
         "name": "name2",
        "projectName": "TestProject",      
    },
    {
        "id": "5678",
        "applicationKey": "5678-name2",
        "name": "name2",
        "projectName": "TestProject2",
    },
   {
        "id": "9101112",
        "applicationKey": "9101112-name3",
        "name": "name3",
        "projectName": "TestProject3",
    },
],
"totalSize": 3
}

收到回复后,我已将其转换为字符串:

    String PaListContent = getContent(PaListResponse);

    private static String getContent(HttpResponse response) {
        HttpEntity entity = response.getEntity();
        if (entity == null) return null;
        BufferedReader reader;
        try {
            reader = new BufferedReader(new InputStreamReader(entity.getContent()));
            String line = reader.readLine();
            reader.close();
            return line;
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

现在,我想在字符串中搜索项目名称(例如" Testproject2")并希望拥有属性" id"和"名称"同样。

我已尝试过

JSONObject jsonObject = new JSONObject(PaListContent);
JSONObject myResponse = jsonObject.getJSONObject("elements");
//JSONArray tsmresponse = (JSONArray) myResponse.get("listTsm");

ArrayList<String> list = new ArrayList<String>();

for(int i=0; i<tsmresponse.length(); i++){
    list.add(tsmresponse.getJSONObject(i).getString("name"));
}

System.out.println(list);

但问题是,我总是得到&#34; org.json.simple.JSONObject无法转换为org.json.simple.JSONArray&#34;。我认为问题是,因为我的json是一个数组,但我怎样才能获得属性?

最诚挚的问候!

2 个答案:

答案 0 :(得分:1)

您的elements是一个JSONArray,但是您尝试将其解析为JSONObject,请更改您的代码:

JSONObject jsonObject = new JSONObject(PaListContent);
JSONArray myResponse = jsonObject.getJSONArray("elements");
//JSONArray tsmresponse = (JSONArray) myResponse.get("listTsm");

ArrayList<String> list = new ArrayList<String>();

for(int i=0; i<myResponse.length(); i++){
    list.add(myResponse.getJSONObject(i).getString("name"));
}

System.out.println(list);

这将按预期工作

答案 1 :(得分:0)

  

但问题是,我总是得到 org.json.simple.JSONObject无法投射to org.json.simple.JSONArray 。我认为问题是,因为我的json是一个数组,但我怎样才能获得属性?

使用JSONArray代替

JSONArray myResponse = jsonObject.getJSONArray("elements");

Here您可以找到更多示例