Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据json字符串的同级值在java中解析json字符串_Java - Fatal编程技术网

如何根据json字符串的同级值在java中解析json字符串

如何根据json字符串的同级值在java中解析json字符串,java,Java,我有键值对,其中值是json数组 我需要对这个json进行解析,以根据本例中需要的名称值获得输出 输入 输出 {"123": ["v1","v2"]} 与Map类似,您需要解析对象123和更高版本的对象列表{name:…,value:…} JSONParser parser = new JSONParser(); try { Object obj = parser.parse(new FileReader("*.json")); JSONObje

我有键值对,其中值是json数组

我需要对这个json进行解析,以根据本例中需要的名称值获得输出

输入

输出

{"123": ["v1","v2"]} 

与Map类似,您需要解析对象123和更高版本的对象列表{name:…,value:…}

JSONParser parser = new JSONParser();

    try {

        Object obj = parser.parse(new FileReader("*.json"));

        JSONObject jsonObject = (JSONObject) obj;

        String name = (String) jsonObject.get("name");

        long value = (Long) jsonObject.get("value");

        // loop array
        JSONArray msg = (JSONArray) jsonObject.get(" name of 123 ");
        Iterator<String> iterator = msg.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }

    }

嘿,您可以使用Json简单库来实现这一点。从下载jar。以下是特定情况下的代码片段,您将如何解析只应在列表中添加所需名称值的对象:

try{
    JSONParser parser = new JSONParser();
    JSONObject jsonObject = (JSONObject) parser.parse("{\"123\" : [{\"name\" : \"wanted\", \"value\" : \"v1\"   }, {\"name\" : \"wanted\", \"value\" : \"v2\" }, {\"name\" : \"unwanted\", \"value\" : \"v3\" }]}");
    JSONArray jsonArray = (JSONArray) jsonObject.get("123");
    List<String> valueList = new ArrayList<>();
    for(int i=0;i<jsonArray.size();i++){
        JSONObject o = (JSONObject) jsonArray.get(i);
        if(o!=null && "wanted".equals(o.get("name"))){
            String value = (String) o.get("value");
            valueList.add(value);
        }
    }
    Map<String,List<String>> map = new HashMap<>();
    map.put("123",valueList);
    System.out.println(map);
}catch(Exception e){

}

首先你可以在这里看到:对不起,你的问题很不清楚。您是否正在尝试从带有'name:dispured'的数组项中筛选,并从所需的数组项中仅获取值?如果是,那么输出可能是123[v2,v3]。您尝试过什么吗?
try{
    JSONParser parser = new JSONParser();
    JSONObject jsonObject = (JSONObject) parser.parse("{\"123\" : [{\"name\" : \"wanted\", \"value\" : \"v1\"   }, {\"name\" : \"wanted\", \"value\" : \"v2\" }, {\"name\" : \"unwanted\", \"value\" : \"v3\" }]}");
    JSONArray jsonArray = (JSONArray) jsonObject.get("123");
    List<String> valueList = new ArrayList<>();
    for(int i=0;i<jsonArray.size();i++){
        JSONObject o = (JSONObject) jsonArray.get(i);
        if(o!=null && "wanted".equals(o.get("name"))){
            String value = (String) o.get("value");
            valueList.add(value);
        }
    }
    Map<String,List<String>> map = new HashMap<>();
    map.put("123",valueList);
    System.out.println(map);
}catch(Exception e){

}