2017-02-06 14 views
1

これは私のJSON Stringです。私はJavaコード[result]を使ってロードしています。Java Json Parser配列

{"result":[ 
{ 
"opened_at":"2017-02-06 10:48:55", 
"sys_updated_by":"user", 
"state":"6" 
}, 
{ 
"opened_at":"2017-02-06 12:20:43", 
"sys_updated_by":"user2", 
"state":"1" 
}, 
{ 
"opened_at":"2017-02-06 15:32:34", 
"sys_updated_by":"user3", 
"state":"1" 
} 
] 
} 

これはJSONデータをJSONArrayに保存する部分です。

JSONArray arr = obj.getJSONArray("result"); 
     for (int i = 0; i < arr.length(); i++) { 
      String opened_at = arr.getJSONObject(i).getString("opened_at"); 
      String sys_updated_by = arr.getJSONObject(i).getString("sys_updated_by"); 
      String state = arr.getJSONObject(i).getString("state"); 

     } 

(例えば、System.out.println()を使用して)consoleのuser2からopen_atを出力するにはどうすればよいですか?

+0

私はあなたに質問があります。このデータには、1人のユーザーから何回もアクセスできますか?または1回だけ。このソリューションにマップを使用できるためです。繰り返しごとに、ユーザーストリングをキーとして追加し、日付の値を値として追加します。 – Gatusko

答えて

0

たとえば、user2からopens_atにアクセスするにはどうすればよいですか?

java.util.Map<String , Object> myMap = new java.util.HashMap<>(); 

for (int i = 0; i < arr.length(); i++) { 
     String opened_at = arr.getJSONObject(i).getString("opened_at"); 
     String sys_updated_by = arr.getJSONObject(i).getString("sys_updated_by"); 
     String state = arr.getJSONObject(i).getString("state"); 

     // your CATCH 
     myMap.put(sys_updated_by , arr.getJSONObject(i)); 
    } 

// IF YOUR ARE HARDCODING ACCESS 
try 
{ 
    System.out.println(((JSONObject)myMap.get("user")).getString("opened_at") + ((JSONObject)myMap.get("user2")).getString("opened_at")); 
} 
catch(Exception any){} 

関心を持つすべてのフィールドのJSONObjectへのご参考のためにKEY BECOME、sys_update_byキーと値をしようと後で、それはあなたが単にハッシュマップ内のユーザー名を指定することで、あなたの興味のあるレコードを取得するのに役立ちましょう何百万ものアップデートをおかけして申し訳ありませんが、私はこれがあなたがお探しの答えではない方法についてお話したいと思います。

0

あなたはforループで、あなただけのsys_updated_byの値をチェックし、opened_atの値を、対応する取得する必要があり、ほとんどがあります。非常にシンプルなそのあなたがfor-each loopを使用

JSONArray arr = obj.getJSONArray("result"); 
String opened = null; 
for (int i = 0; i < arr.length(); i++) { 
    String sys_updated_by = arr.getJSONObject(i).getString("sys_updated_by"); 
    if("user2".equals(sys_updated_by)){ 
     opened = arr.getJSONObject(i).getString("opened_at"); 
     break; //No need to iterate anymore 
    } 
} 
System.out.println(opened); 
+0

'sys_updated_by'が' user2'でない人に 'opens_at'にアクセスする必要はないと思います。 –

0

、それかどうかを確認user2ストアの値はopened_atで、一部の文字列はLOOから抜け出しています。

String openedAt = ""; 
for(JOSNObject object : arr){ 
     if(object.getString("sys_updated_by").equals("user2")){ 
      openedAt = object.getString("opened_at"); 
      break; 
     } 
} 
System.out.println(openedAt);