2017-04-26 49 views
-4

我有键值对<string, string>其中value是json数组。如何解析Java中的json字符串取决于它的兄弟值

我需要解析这个json来获取输出,取决于name的值,在这种情况下是wanted

输入

"123" : [{ name : "wanted", value : "v1" }, {name : "wanted", value : "v2" }, {name : "unwanted", value : "v3" }] 

输出

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

(如Map<String,List<String>>

+0

首先,你可以在这里看到: http://stackoverflow.com/问题/ 2591098 /如何解析-json-in-java?rq = 1 –

+0

对不起,但你的问题还不太清楚。你是否试图用'name:'不想要的''从数组条目中过滤并从'wanted'只获取'value'?如果是,那么输出应该是'123 [v2,v3]'。 – Pshemo

+0

你尝试过什么吗? – tnw

回答

0

您需要解析的对象 “123” 和对象{名以后列表: “..”,值:“..”}

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(); 
    } 

    } 
0

嘿,你可以使用Json Simple库来做到这一点。从https://code.google.com/archive/p/json-simple/downloads下载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){ 

}