JSON NullPointerException

MichiMütze

Mitglied
Hallo zusammen,

ich habe ein kleines Problem mit meinen Programm. Und zwar geht es um folgendes Problem. Ich möchte aus einer Textdatei jede Zeile in ein JSONObject parsen. Anschließend überprüfe ich, ob dieses JSONObject einen key mit einem bestimmten String beinhaltet. Ist der String identisch wird die die Zeile aus der Textdatei in eine ArrayList hinzugefügt. Für die ersten beiden Zeilen funktioniert das auch, danach liefert Eclipse mit aber eine NullPointerException und ich weiss leider nicht was ich falsch gemacht habe. Vielleicht kann der ein oder andere mir helfen. Hier mein Code.

Quellcode:

Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;



public class TestArrayList {
	
	public static void main (String[] args) throws IOException {
	
		try {
		
			FileReader fr = new FileReader("C:/xampp/htdocs/9999-bonanza-10.01.2013.txt"); 
			BufferedReader br = new BufferedReader(fr);
			List<String> list = new ArrayList<String>();
			String zeile = null;
		
			while ((zeile = br.readLine()) != null) {
				
				System.out.println("----------------------------------------");
				System.out.println("Inhalt der aktuellen Zeile: " + zeile);
				
				JSONObject data = (JSONObject) JSONValue.parse(zeile);
				
				System.out.println("ID: " + data.get("id"));
				System.out.println("CMD: " + data.get("cmd").toString());
	
				if(data.get("id").equals("2")) {
					
					list.add(zeile);
					System.out.println("ArrayList: " + list.size());
					System.out.println("Gelesene Zeile: " + zeile + " hinzugefügt.");
					
				}
				else
					System.out.println("Zeile nicht hinzugefügt!");
			}
			
			br.close();
			} catch (IOException e) {
				e.printStackTrace();
				}
		
//		for(int i = 0; i < list.size(); i++) {
//			System.out.println(list.get(i));
//		}
		
		
	}
}

Output:

----------------------------------------
Inhalt der aktuellen Zeile: {"id":"1","confirmation":"NOTREQUIRED","timeouthint":"0","cmd":"WriteStdOut","message":"Hello World"}
ID: 1
CMD: WriteStdOut
Zeile nicht hinzugefügt!
----------------------------------------
Inhalt der aktuellen Zeile: {"id":"2","confirmation":"NOTREQUIRED","timeouthint":"0","cmd":"WriteStdOut","message":"Hello World"}
ID: 2
CMD: WriteStdOut
ArrayList: 1
Gelesene Zeile: {"id":"2","confirmation":"NOTREQUIRED","timeouthint":"0","cmd":"WriteStdOut","message":"Hello World"} hinzugefügt.
----------------------------------------
Inhalt der aktuellen Zeile:
Exception in thread "main" java.lang.NullPointerException
at TestArrayList.main(TestArrayList.java:29)


Inhalt meiner Textdatei:

{"id":"1","confirmation":"NOTREQUIRED","timeouthint":"0","cmd":"WriteStdOut","message":"Hello World"}
{"id":"2","confirmation":"NOTREQUIRED","timeouthint":"0","cmd":"WriteStdOut","message":"Hello World"}
{"id":"1","confirmation":"NOTREQUIRED","timeouthint":"0","cmd":"WriteStdOut","message":"Hello World"}
{"id":"1","confirmation":"NOTREQUIRED","timeouthint":"0","cmd":"WriteStdOut","message":"Test 123456789"}
{"id":"2","confirmation":"NOTREQUIRED","timeouthint":"0","cmd":"WriteStdOut","message":"Server sagt Hallo"}
 
Zuletzt bearbeitet:
??
du erzählst nicht, was an dritter Stelle in der Datei steht?
vielleicht "hoppala", was soll dann JSONValue.parse(zeile) daraus machen?

Zeile 24 ist vielleicht die bisher beste im Programm, und du kommentierst sie aus:
ausgeben was los ist, welche Zeile gelesen wird, vorher kann man doch nichts damit anfangen

Zeile 28 geht dann auch in die richtige Richtung, prüfen was an data gekommen ist,
allerdings gäbe es dort schon NullPointerException wenn data null ist,
toString() wird gegebenenfalls sowieso aufgerufen, schreibe einfach:
> System.out.println("DATA: " + data)

warum eine bestimmte Zeile nicht zu einem data geparst werden kann, kann ich dann freilich kaum sagen,
ich hoffe es wird aus dem Inhalt der Zeile, besonders im Vergleich zu den vorherigen beiden erfolgreichen, klar

edit:
vielleicht ist data auch nicht null, aber die Id fehlt, einfach anschauen
 
warum kommt bei 'Inhalt der aktuellen Zeile: ' im dritten Fall keine Zeile?
ist das mit der Exception verrutscht oder wird tatsächlich etwas komisches gelesen?

evtl. bzw. wohl wahrscheinlich hat das ganze mit JSON nicht das geringste zu tun,
es kann aber noch ein Fehler bei der Wiedergabe der Ausgabe sein,

du musst nun zunächst JSON entfernen, verkürze deine Schleife auf
Java:
while ((zeile = br.readLine()) != null) {
                
                System.out.println("----------------------------------------");
                System.out.println("Inhalt der aktuellen Zeile: " + zeile);
}
wenn wieder die dritte Zeile nicht zu sehen ist, dann muss die Datei genauer auf komische Zeilenumbrüche oder was auch immer untersucht werden,
aber abwarten, einen Schritt nach dem anderen
 
Also ich habe mir gerade nochmal die Textdatei angeschaut. Anscheinend war dort eine leere Zeile dazwischengerutscht. Ich hab die leere Zeile entfernt und mein Programm nochmal ausgeführt. Jetzt geht es wieder. Ich bekomm jetzt auch keine Fehlermeldung mehr.
 
dann wünsche ich dir etwas daraus gelernt zu haben, so ein einfacher Fehler kann immer und überall passieren und sollte so wenig ein Problem sein wie ein offener Schnürsenkel,
überlege genau was los war, wie man es mit einfachsten Mittel aus objektiv-ruhiger Lage zwangsläufig finden kann und kein Forum fragen muss 😉
 

Neue Themen


Zurück
Oben