# Konvertierung von json zum Java Objekt nach vorgegebenem Schema



## q-jack (17. Mai 2012)

Hallo Zusammen,
Ich hoffe ihr könnt mir helfen. Google konnte mir mit meinem Problem nicht helfen.
Ich habe folgendes Schema:



> // schema of the 101 wiki in the Entity Relationship Schema Notation
> // (see megalib/ERGraphGraph.php)
> // @ means key
> // ! means 1
> ...



und eine json datei. ich poste nur einen einen kleinen teil daraus, da diese sehr lang ist.



> {
> 
> "Category": {
> "AspectADASHoriented_programming_language": {
> ...



Ich habe in java die einzelnen Klassen aus dem Schema mit gettern und settern erstellt, sowie ein toString methode implementiert.
in der main lese ich das file ein, aber bekomme bei der Ausgabe nur null-Werte.
Ich habe etwas in der Richtung gelesen, dass ich eine zusätzliche Klasse brauche, die HasMaps der einzelnen Klassen enthalten soll, aber ich kann damit nichts anfangen bzw. verstehe den Sinn nicht.
Hier mein Code aus der main, über tipps wäre ich sehr dankbar


```
public class JsonQueryApi {

	public static void main(String [] args) throws IOException{

	try {
		 
		BufferedReader br = new BufferedReader(
			new FileReader("Wiki101Full.json"));
			
		Gson gson = new Gson();
 
		//convert the json string back to object
		Implementation implementation = gson.fromJson(br, Implementation.class);
 
		System.out.println(implementation);
 
	} catch (IOException e) {
		e.printStackTrace();
	}
}
}
```
und hier einmal die Implementation Klasse

```
public class Implementation {
	public String name;
	public String id;
	public String type;
	public String url;
	public String headline;
	public ArrayList<Language> languages;
	public ArrayList<Technology> technologies;
	
	public  Implementation(String name, String id, String type,
			String url, String headline, ArrayList<Language> Languages,ArrayList<Technology>technologies ){
		this.name = name;
		this.id = id;
		this.type  = type;
		this.url=url;
		this.headline=headline;
		
		
	}

	public String getName(){
		return name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getHeadline() {
		return headline;
	}

	public void setHeadline(String headline) {
		this.headline = headline;
	}

	public ArrayList<Language> getLanguages() {
		return languages;
	}

	public void setLanguages(ArrayList<Language> languages) {
		this.languages = languages;
	}

	public ArrayList<Technology> getTechnologies() {
		return technologies;
	}

	public void setTechnologies(ArrayList<Technology> technologies) {
		this.technologies = technologies;
	}

	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
	   return "Implementation [name=" + name + ", id=" + id + ", type="
		+ type +", url=" + url + ", headline=" + headline +"]";
	}

}
```


----------



## Kenan89 (18. Mai 2012)

Du benutzt den library von google, ne?
Mit simple-json.jar könnte ich dir weiterhelfen. Wenn du willst benutze den.
Einfach in google eintippen und downloaden.
Funktioniert im Prinzip gleich, wenn ich mir so deinen Code ansehe.


----------



## q-jack (21. Mai 2012)

ja. man hat uns empfohlen google zu benutzen aber ich bin gerne bereit was anderes auszuprobieren. Ich lade mir mal die simple-json.jar herunter und probier mal herum.
Über ein kleine Hilfestellung wäre ich dankbar, wenn du sagst dass die fast gleich funktionieren, würde ich ja an der selben Stelle hängen bleiben.


----------



## q-jack (21. Mai 2012)

```
InputStream ijson = new FileInputStream("Wiki101Full.json");
String jsonTxt = IOUtils.toString( ijson );

		   
		   JSONParser parser = new JSONParser();
		   Object obj=parser.parse(jsonTxt);
		   System.out.println(obj);
```

Das habe ich jetzt eingefügt und der zeigt mir auch schön die Inhalte an, aber ich habe da ja noch keine Struktur drin. Wie bekomme ich das hin? Die Klassen Category, Concept, Implemenatation...siehe Schema stehen ja ganz außen und da drin verschachtelt sind weitere Werte die ich abfragen muss.
Wie kann ich das am Besten lösen. Hatte das mit einer HashMap probiert, aber da hatte ich nicht die Möglichkeit einzelne Werte abzufragen wie z.B. "gib mir alle id von Implementation aus die die Language name=haskell haben


----------

