String aus Json File parsen

JuergenE

Mitglied
Hallo zusammen,

ich habe folgende JSon Datei (Auszug):

[XML]{
"TEST" : {
"TESTS" : [
{
"RESULT" : "FAIL",
"NAME" : "box",
"SKIP_COUNT" : 0,
"ITERATIONS" : [
{
"MEASUREMENT" : [
{
"VALUES" : [
{
"PARAMETER" : "TX_MIN",
"UNIT" : "bit/s",
"VALUE" : "79692907",
"DESCRIPTION" : "---",
"SUMMARYVALUE" : "false"
},
{
"PARAMETER" : "TX_MAX",
"UNIT" : "bit/s",
"VALUE" : "79692907",
"DESCRIPTION" : "---",
"SUMMARYVALUE" : "true"
},
{
"PARAMETER" : "TX_MEAN",
"UNIT" : "bit/s",
"VALUE" : 79692907,
"DESCRIPTION" : "---",
"SUMMARYVALUE" : "false"
},
{
"PARAMETER" : "RX_MIN",
"UNIT" : "bit/s",
"VALUE" : "30507611",
"DESCRIPTION" : "---",
"SUMMARYVALUE" : "false"
},
{
"PARAMETER" : "RX_MAX",
"UNIT" : "bit/s",
"VALUE" : "30507611",
"DESCRIPTION" : "---",
"SUMMARYVALUE" : "true"
},
{
"PARAMETER" : "RX_MEAN",
"UNIT" : "bit/s",
"VALUE" : 30507611,
"DESCRIPTION" : "---",
"SUMMARYVALUE" : "false"
}
],
"DESCRIPTION" : "Standard",
"TIME_END" : 1389346949,
"TIME_START" : 1389346949,
"NUMBER" : 4
}
],
"REASON" : "Channel = 1 CLIENT = xxx",
"RESULT" : "PASS",
"TIME_END" : 1389346949,
"TIME_START" : 1389346905,
"NUMBER" : 3
}[/XML]

Hier gibt es nun 2 Values, an die ich heran will
-> "VALUE" : "79692907"
-> "VALUE" : "30507611"

Mein Java Code sieht wie folgt aus:

Java:
JSONParser parser = new JSONParser();

		try {
			// json file converted to object
			Object obj2 = parser.parse(new FileReader(path));
			// set json object to work with
			JSONObject jsonObject2 = (JSONObject) obj2;
			System.out.println(jsonObject2.toString());
			
			JSONObject content1 = (JSONObject) jsonObject2.get("VALUES");
			System.out.println(content1.toJSONString());

Das File an sich wird problemlos gelesen.
Den kompletten Inhalt kann ich mir ausgeben lassen.
Will ich aber an einen gewissen Teil des Inhalts heran (egal welchen), bekomme ich eine NullPointer Exception, die ich mir nicht erkären kann...
Vielleicht muss ich mich über die geschachtelten Strings durchhangeln um Values zu adressieren!?

Bitte um Hilfe!

Gruß Jürgen
 
Ich vermute mal in Zeile 10 liegt der Fehler.

Du kannst nicht einfach auf ein Feld zugreifen, das weiter unten liegt, du musst dich schon zu dem Feld vorarbeiten, indem du
Code:
.get("TEST").get("TESTS")[0].get("ITERATIONS")[0] ...
etc. machst (und bei jedem Schritt castest...).
 
Zuletzt bearbeitet:

spielt keine Rolle...
ob ich "TEST" oder "VALUES" oder was auch immer adressiere, bekomme ich eine NullPointerException


Ich vermute mal in Zeile 10 liegt der Fehler.

Du kannst nicht einfach auf ein Feld zugreifen, das weiter unten liegt, du musst dich schon zu dem Feld vorarbeiten, indem du .get("TEST").get("TESTS")[0].get("ITERATIONS")[0] ... etc. machst (und bei jedem Schritt castest...).

Da habe ich auch vermutet - das ich mich irgendwie durchhangeln muss.
Jedoch war mir syntaktisch nicht ganz klar, wie das genau auszusehen hat.
Ich kann erst morgen nachmittag wieder testen.
Wie und wonach soll ich denn in jedem Step casten?
Jeweils nach
Java:
 (JSONObject)
?

Dann müsste das in etwa so aussehen:

Java:
JSONObject content1 = (JSONObject) jsonObject2.get("TEST").get("TESTS").get("ITERATIONS").get("VALUES"); usw

Mir ist aber nicht wirklich klar, wo ich den Cast einfügen soll..
Jeweils vor
Java:
.get
?

Grüße Juergen
 
Ich kenne die API nicht, die du benutzt, aber mal angenommen, jeder Aufruf auf get gibt ein Object zurück:

Java:
((JSONObject[])((JSONObject[]) ((JSONObject) o.get("TEST")).get("TESTS"))[0].get("ITERATIONS"))[0]

Ja, das ist hässlich. Andere Möglichkeit:

Java:
JSONObject a1 = (JSONObject) o.get("TEST");
JSONObject[] tests= (JSONObject[]) a.get("TESTS");
for ( JSONObject test : tests ) {
  JSONObject[] iterations = (JSONObject[]) test.get("ITERATIONS");
  for ( JSONObject iteration : iterations ) {
    iteration.get('...')
  }
}
 

Zurück
Oben