2016-12-05 3 views
-3

Ich verwende:Erstellen Klasse von json mit Gson

Gson gson = new Gson(); 
return gson.fromJson(jsonstr,cls); 

Wo jsonstr ist:

{"title": "ttl","data": "dta"} 

Und cls ist:

public class GSONTest { 

public String title; 
public String data; 

public String getTitle() { 
    return title; 
} 

public String getData() { 
    return data; 
} 

}

Aber ich mit etwas komplizierter, hier ist ein Beispiel für meine JSON:

{ 
    "Some1": { 
    "data": "dta", 
    "title": "ttl" 
    }, 
    "Some3": { 
    "data": "dta2", 
    "title": "ttl2" 
    } 
} 

Wie sollte meine Klasse für diese Art von Json aussehen?

+1

benötigen Sie eine andere Klasse, die enthält 'Map ' – Blackbelt

+0

Mögliche Duplikat [generieren Java-Klasse von JSON?] (Http: // Stackoverflow .com/questions/1957406/generate-java-class-from-json) – Nithinlal

Antwort

-2

You may see the working here in screen shot
Beispiel {

@SerializedName("Some1") 
@Expose 
private Some1 some1; 
@SerializedName("Some3") 
@Expose 
private Some3 some3; 


public Some1 getSome1() { 
    return some1; 
} 

public void setSome1(Some1 some1) { 
    this.some1 = some1; 
} 


public Some3 getSome3() { 
    return some3; 
} 


public void setSome3(Some3 some3) { 
    this.some3 = some3; 
} 

} 

---------------------------------- -com.example.Some1.java ----------------

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Some1 { 

    @SerializedName("data") 
    @Expose 
    private String data; 
    @SerializedName("title") 
    @Expose 
    private String title; 

public String getData() { 
    return data; 
} 


public void setData(String data) { 
    this.data = data; 
} 


public String getTitle() { 
    return title; 
} 


public void setTitle(String title) { 
    this.title = title; 
} 

} 

------------------- ---------------- com.example.Some3.java ----------------

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Some3 { 

@SerializedName("data") 
@Expose 
private String data; 
@SerializedName("title") 
@Expose 
private String title; 

public String getData() { 
return data; 
} 


public void setData(String data) { 
this.data = data; 
} 


public String getTitle() { 
return title; 
} 


public void setTitle(String title) { 
this.title = title; 
} 

} 

Das ist der Aktivitätscode für Sie, GENIESSEN Sie !!!

public class MainActivity extends AppCompatActivity { 

String json = "{\n" + 
     " \"Some1\": {\n" + 
     " \"data\": \"dta\",\n" + 
     " \"title\": \"ttl\"\n" + 
     " },\n" + 
     " \"Some3\": {\n" + 
     " \"data\": \"dta2\",\n" + 
     " \"title\": \"ttl2\"\n" + 
     " }\n" + 
     "}"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Example mExample = new Gson().fromJson(json, Example.class); 

    Toast.makeText(this, mExample.toString(), Toast.LENGTH_SHORT).show(); 
} 
} 

Sie auch diese Webseite Klasse generieren link

+0

nicht stimmen, wenn Sie nicht die Antwort selbst wissen, ist dies eine praktikable Lösung. –

+1

Nein, ist es nicht.Das OP hat bereits den Pojo, das innere json zu analysieren. – Blackbelt

+0

es ist so meine editierte Antwort vor Gedankenklasse für diese {"title": "ttl", "data": "dta"} json wird benötigt, um den JAVA-Code auch für weitere Anleitung. –

-1

Ihre Klasse ist wie dieser

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Example { 

@SerializedName("Some1") 
@Expose 
private Some1 some1; 
@SerializedName("Some3") 
@Expose 
private Some3 some3; 


public Some1 getSome1() { 
return some1; 
} 

public void setSome1(Some1 some1) { 
this.some1 = some1; 
} 

public Some3 getSome3() { 
return some3; 
} 

public void setSome3(Some3 some3) { 
this.some3 = some3; 
}} 

Weiter Some1.class

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Some1 { 

@SerializedName("data") 
@Expose 
private String data; 
@SerializedName("title") 
@Expose 
private String title; 


public String getData() { 
return data; 
} 

public void setData(String data) { 
this.data = data; 
} 


public String getTitle() { 
return title; 
} 


public void setTitle(String title) { 
this.title = title; 
} 

} 

nächsten Some3.class

können
package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Some3 { 

@SerializedName("data") 
@Expose 
private String data; 
@SerializedName("title") 
@Expose 
private String title; 

/** 
* 
* @return 
* The data 
*/ 
public String getData() { 
return data; 
} 

/** 
* 
* @param data 
* The data 
*/ 
public void setData(String data) { 
this.data = data; 
} 

/** 
* 
* @return 
* The title 
*/ 
public String getTitle() { 
return title; 
} 

/** 
* 
* @param title 
* The title 
*/ 
public void setTitle(String title) { 
this.title = title; 
} 

} 
0
Type type = new TypeToken<Map<String, GSONTest>>(){}.getType(); 
    Map<String, GSONTest> gsonTestMap = gson.fromJson(jsonstr, type); 
0

Wie Sie alle JSON-Objekt ist wie eine Klasse in Java sehen, so dass Sie eine Java-Klasse für die Wurzel Ihrer JSON so etwas wie dies schaffen sollte:

public class GSONTest { 

    GSONTest2 element1; 
    GSONTest2 element2; 

    //constructor, getters and setters here 

} 

Sie sehen, dass ich verwendet eine weitere Aufgabe so kann es die „level2“ Ihre JSON diese Klasse so etwas wie dies wird gespeichert:

public class GSONTest2{ 
    String element1; //This will stored "dta and dta2" 
    String element2; //This will stored "ttl1 and ttl2" 
    //constructor, getters and setters here 

}

So

wenn Sie Gson anrufen sollten Sie nur tun:

Gson gson = new Gson(); 
return gson.fromJson(jsonstr,GSONTest.class);