2017-02-06 3 views
1

Dies ist mein JSON String, den ich erfolgreich mit meinem Java-Code [result] geladen habe.Java Json Parser Array

{"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" 
} 
] 
} 

Dies ist der Teil, wo ich meine JSON-Daten in einem JSONArray speichern.

Wie kann ich zum Beispiel openedat von Benutzer2 in der Konsole (mit System.out.println()) drucken?

+0

Ich habe eine Frage an Sie. Diese Daten können mehrmals von einem Benutzer abgerufen werden? Oder nur einmal. Weil Sie eine Karte für diese Lösung verwenden können. Für jede Iteration fügen Sie den Benutzer String als Schlüssel und den Wert des Datums als Wert hinzu? – Gatusko

Antwort

0

Wie kann ich zum Beispiel Zugriff auf opened_at von user2?

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

Lassen sys_update_by Schlüssel-Wert, werden die Schlüssel für Ihre Referenzen auf die JSONObject für alle interessierten Felder und später lassen es Ihnen helfen, Ihre interessierten Datensätze abzurufen, indem Sie einfach den Benutzernamen in der Hash-Karte spezifiziert , Entschuldigung für eine Million Updates, ich werde sicherlich gerne diskutieren, wie dies nicht die Antwort ist, die Sie suchen

0

Sie sind fast da, in der for Schleife, Sie müssen nur den Wert von sys_updated_by zu überprüfen und entsprechende Wert für opened_at erhalten:

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

denkst du nicht, dass es unnötig ist, auf 'opened_at' für diejenigen zuzugreifen, deren' sys_updated_by' nicht 'user2' ist? –

0

Es ist viel einfacher, wenn Sie for-each loop verwenden, und dann prüfen, ob es ist user2 Speicherwert von opened_at ist ein String und brechen aus dem Klo.

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