2017-04-26 11 views
-4

キー値のペアは<string, string>です。値はjson配列です。javaのjson文字列を兄弟値に応じて解析する方法

nameの値に応じてこのjsonを出力するには、この場合はwantedである必要があります。

入力

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

出力

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

(のようなMap<String,List<String>>

あなたがオブジェクト "123" とオブジェクト{名の後にリストを解析する必要が
+0

最初にあなたがここに見ることができます: http://stackoverflow.com/質問/ 2591098/json-in-java?rq = 1 –

+0

申し訳ありませんが、あなたの質問はかなり不明です。 'name:"不要な ''で配列エントリからフィルタリングし、 'wanted'から' value'だけを取得しようとしていますか? yesの場合、出力はおそらく '123 [v2、v3]'になります。 – Pshemo

+0

何か試しましたか? – tnw

答えて

0

: ".."、値: ".."}

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ライブラリを使うことができます。 jarをhttps://code.google.com/archive/p/json-simple/downloadsからダウンロードしてください。ここではどのようにあなたが名前だけの値がリストに追加する必要がありたかったあなたのオブジェクトを解析することが、あなたの特定のケースのためのコードスニペットは、次のとおりです。

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){ 

} 
関連する問題