2017-01-03 3 views
1

Ich muss den Wert von RecordOne aus folgenden JSON herausziehen.Herausziehen Wert der Schlüssel in JSON mit Java, wenn der Schlüssel unter der Hierarchie ist

{ 
    "errors": [], 
    "data": { 
    "paging": { 
     "RecordOne": 8, 
     "RecordTwo": 9, 
     "recordThree": 2, 
     "totalNumberOfRecords": 86052 
    }, 
    "products": [ 
     { 
     "testabstract": "test data", 
     "authors": "Frank Jr.", 
     "invertedauthors": "Frank VJr.", 
     "formatCode": "KND" 
     } 
    ] 
    } 
} 

Ich bin mit Java als Sprache und JSON-Objekt, das gleiche zu erreichen, finden Sie, was ich verwende:

protected String getTokenValueUnderHeirarchy(String responseString){ 
     JSONObject json = new JSONObject(responseString); 
     String val= json.getJSONObject("data").getJSONObject("paging").getString("RecordOne"); 
     System.out.println("val::"+val); 
return val; 
    } 

Ich erhalte Wert von val = 1, sollte es sein 8

Wenn ich versuche, Wert zu suchen, für den Schlüssel totalNumberOfRecords mit dem gleichen Code gibt es richtigen Wert, die 86052 ist

ich weiß, es ist etwas, Schweller y, aber ich kann es nicht fassen.

Antwort

1

Wenn ich Ihren Code mit dem JSON-Beispiel ausgeführt habe, endete ich mit einer "JSONException: JsonObject [" RecordOne "] ist keine Zeichenfolge" ..... was es nicht ist. Wrapping der 8 mit doppelten Anführungszeichen: "8" gab den von Ihnen erwarteten Wert zurück. Sie können auf diesen Wert mit anderen Methoden zugreifen: getInt, wenn Sie möchten.

Dieser Testfall analysiert sowohl einen String als auch einen int. Ich habe das aus deinem Beispiel gezogen. Läuft es für dich?

package org.nadnavillus.test; 

import org.json.JSONObject; 
import org.junit.Test; 

public class TestCase { 

    protected String getTokenValueUnderHeirarchy(String responseString) throws Exception { 
     JSONObject json = new JSONObject(responseString); 
     String val= json.getJSONObject("data").getJSONObject("paging").getString("RecordOne"); 
     System.out.println("val::"+val); 
     return val; 
    } 

    protected String getTokenValueUnderHeirarchyInt(String responseString) throws Exception { 
     JSONObject json = new JSONObject(responseString); 
     int val= json.getJSONObject("data").getJSONObject("paging").getInt("RecordTwo"); 
     System.out.println("val::"+val); 
     return String.valueOf(val); 
    } 

    @Test 
    public void testJson() throws Exception { 
     String input = "{\"errors\": [], \"data\": {\"paging\": {\"RecordOne\": \"8\", \"RecordTwo\": 9, \"recordThree\": 2, \"totalNumberOfRecords\": 86052}}}"; 
     String test = this.getTokenValueUnderHeirarchy(input); 
     System.out.println(test); 
     test = this.getTokenValueUnderHeirarchyInt(input); 
     System.out.println(test); 
    } 
} 
+0

getInt nicht helfen, die JSON ich gegeben habe beispielsweise Antwort ist erhalte ich nach einer GET-Anforderung in Postman schlagen Mit getInt gab mir auch 1 als Ausgabe. – SSabharwal

+0

Ich habe einen schnellen (nicht den besten) JUnit-Test hinzugefügt, der zeigt, dass dieser Befehl sowohl mit getString als auch mit getInt ausgeführt wird. – nadnavillus

+0

Ich merke auch, dass dein original JSON nicht ganz korrekt ist. Die Validierung schlägt fehl, da ein abschließendes "}" fehlt. Das könnte am Beispiel nur ein schlechter Schnitt sein. – nadnavillus

Verwandte Themen