String mit GSON umwandeln

susa.

Mitglied
Hallo liebe java-Gemeinde,

Mein Programm tut folgendes: Es liest eine Google-Such-Anfrage aus, bekommt einen JSON-String zurück, der ausgewertet weren sollen.
Das ist der (wichtige Teil des) Code:
Java:
public class GoogleResults {

	private ResponseData responseData;
	    public ResponseData getResponseData() { return responseData; }
	   
	   static class ResponseData 
	    {
	        private List<Result> results;
	        public List<Result> getResults() { return results; }   
	    }
	
	    static class Result 
	    {
	        private String url;
	        private String title;
	        public String getUrl() { return url; }
	        public String getTitle() { return title; }	      
	    }
	}

Aufruf:
Java:
GoogleResults results = new Gson().fromJson(ergebnis, GoogleResults.class);
String titel = results.getResponseData().getResults().get(i).getTitle();

Alles toll, funktioniert.
Allerdings fand ich die Klasse ResponseData überflüssig. Dachte mir, das kann man ja auch so machen:

Java:
public class GoogleResults {

	private ArrayList<Result> results;
    public ArrayList<Result> getResults() { return results; }  
  
    static class Result 
    {
        private String url;
        private String title;
        public String getUrl() { return url; }
        public String getTitle() { return title; }	      
    }

Vorher beinhaltet die Klasse ResponseData ja im Endeffekt auch nur die Liste, also kann man die doch direkt reinmachen.... dacht ich mir so. Beim "Umwandeln" kommt auch noch kein Fehler. Allerdings wenn ich die einzelnen Results ansprechen will, z.B. so:

Java:
String titel = results.getResults().get(i).getTitle());

Dann gibts eine JavaNullPointerExeption.
Kann mir das jemand erklären? Oder einfach sagen, wie man (und ob man) es ohne die Klasse ResponseData machen kann?!

Vielen Dank!
 
Mhm, was ist so schlimm an der Klasse? ich meine genau so ist das JSON Objekt ja aufgebaut...
[xml]
{"responseData": {
"results": [
{
"GsearchResultClass": "GwebSearch",
"unescapedUrl": "http://en.wikipedia.org/wiki/Paris_Hilton",
"url": "http://en.wikipedia.org/wiki/Paris_Hilton",
"visibleUrl": "en.wikipedia.org",
"cacheUrl": "http://www.google.com/search?q\u003dcache:TwrPfhd22hYJ:en.wikipedia.org",
"title": "\u003cb\u003eParis Hilton\u003c/b\u003e - Wikipedia, the free encyclopedia",
"titleNoFormatting": "Paris Hilton - Wikipedia, the free encyclopedia",
"content": "\[1\] In 2006, she released her debut album..."
},
{.......
[/xml]
Das Objekt hat halt ein name/value-Paar --> responseData : neues Objekt . Das Objekt hat wiederum ein name/value-Paar, hier ist das Value nun allerdings eben ein Json-Array mit wiederum neuen Json-Objekten....wenn das Json eben so vorgegeben ist, ist das eben so ?! 🙂
 

Zurück
Oben