# GSON-Parser



## Kenta1561 (8. Aug 2016)

Hallo,

ich habe jetzt einigermaßen verstanden, wie man mit GSON eine JSON-Datei in Java-Objekte umwandeln kann, jedoch nur mit einfachen JSON-Dateien, wie zum Beispiel:

```
{
"id": 1,
"name": "Kenta1561",
"hausnummer": 213
}
```

Nun will ich aber wissen, wie ich kompliziertere Dateien mit einer etwas anderen Schreibweise (ich bin mir jetzt nicht sicher, habe diese Datei nicht selber geschrieben) in Java-Objekte umwandeln kann:

```
{
      "somedata":{
        "748127387281":{
          "id":1,
          "name":"John",
          "random":74818728382
        },
        "834187381288":{
          "id":2,
          "name":"Peter",
          "random":73482178372
       }
}
```
Ich möchte gerne wissen, wie ich jeden Child von "somedata" bekommen kann. Das Problem ist hierbei, dass die Nummern wie 748127387281 zufällige bzw. nicht "vorhersehbare" Nummern sind, deshalb kann man beim parsen diese Nummern nicht spezifizieren kann.

Sorry dass meine Frage etwas unverständlich ist, wenn es Fragen gibt, antworte ich natürlich :3

LG
Kenta1561


----------



## mrBrown (8. Aug 2016)

Du kannst einfach eine Map als Typ von`somedata` benutzen. Keys sind Strings (oder auch Integer, wenn die zufälligen Nummern Integer sind), und als Value dein Objekt, was dann entsprechend Id, name und random enthält.
In der map stehen dann mit den entsprechenden Keys die Objekte


----------



## Kenta1561 (8. Aug 2016)

@mrBrown
Und wie mache ich das?


----------



## mrBrown (8. Aug 2016)

Du erstellst einfach deine Java-Klassen, hast du doch bei den einfachen sicher auch gemacht?

Du hast deine Klasse, die dein JSON-Objekt darstellt, das enthält die Map, und eine Klasse, die inneren Objekte darstellt, mit ID,Name und Random.


----------



## Kenta1561 (8. Aug 2016)

@mrBrown
Sorry, bin ganz neu bei JSON und verstehe das noch nicht ganz


----------



## Flown (8. Aug 2016)

Ein kleines Beispiel wie du obigen JSON String parsen könntest (PS: Dein JSON String ist nicht valid, denn ein "}" fehlt).


```
import java.util.Map;

import com.google.gson.Gson;

public class Test {
  
  public static void main(String... args) {
    String json = "{\r\n" + 
        "      \"somedata\":{\r\n" + 
        "        \"748127387281\":{\r\n" + 
        "          \"id\":1,\r\n" + 
        "          \"name\":\"John\",\r\n" + 
        "          \"random\":74818728382\r\n" + 
        "        },\r\n" + 
        "        \"834187381288\":{\r\n" + 
        "          \"id\":2,\r\n" + 
        "          \"name\":\"Peter\",\r\n" + 
        "          \"random\":73482178372\r\n" + 
        "       }\r\n" + 
        "   }\r\n" + 
        "}";
    Gson gson = new Gson();
    Parent fromJson = gson.fromJson(json, Parent.class);
    System.out.println(fromJson);
  }
}

class Parent {
  private Map<Long, DataContainer> somedata;
  
  public Parent() {
  }
  
  public Parent(Map<Long, DataContainer> somedata) {
    this.somedata = somedata;
  }
  
  public Map<Long, DataContainer> getSomedata() {
    return somedata;
  }
  
  public void setSomedata(Map<Long, DataContainer> somedata) {
    this.somedata = somedata;
  }
  
  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + (somedata == null ? 0 : somedata.hashCode());
    return result;
  }
  
  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    Parent other = (Parent) obj;
    if (somedata == null) {
      if (other.somedata != null) {
        return false;
      }
    } else if (!somedata.equals(other.somedata)) {
      return false;
    }
    return true;
  }
  
  @Override
  public String toString() {
    return "Parent [somedata=" + somedata + "]";
  }
  
}

class DataContainer {
  private int id;
  private String name;
  private long random;
  
  public DataContainer() {
  }
  
  public DataContainer(int id, String name, long random) {
    this.id = id;
    this.name = name;
    this.random = random;
  }
  
  public int getId() {
    return id;
  }
  
  public void setId(int id) {
    this.id = id;
  }
  
  public String getName() {
    return name;
  }
  
  public void setName(String name) {
    this.name = name;
  }
  
  public long getRandom() {
    return random;
  }
  
  public void setRandom(long random) {
    this.random = random;
  }
  
  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + id;
    result = prime * result + (name == null ? 0 : name.hashCode());
    result = prime * result + (int) (random ^ random >>> 32);
    return result;
  }
  
  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    DataContainer other = (DataContainer) obj;
    if (id != other.id) {
      return false;
    }
    if (name == null) {
      if (other.name != null) {
        return false;
      }
    } else if (!name.equals(other.name)) {
      return false;
    }
    if (random != other.random) {
      return false;
    }
    return true;
  }
  
  @Override
  public String toString() {
    return "DataContainer [id=" + id + ", name=" + name + ", random=" + random + "]";
  }
}
```


----------



## Kenta1561 (8. Aug 2016)

@Flown
Danke für deine Antwort  Ich habe deine Antwort nicht gesehen und habe in der Zwischenzeit selber nochmal rumprobiert und habe es selber irgendwie geschafft:

```
package main.java;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Map;
import java.util.Set;

public class Main {

    public static void main(String[] args) {
        try{
            BufferedReader br = new BufferedReader(new FileReader("src/main/java/test.json"));
            JsonParser parser = new JsonParser();
            JsonElement parsedJson = parser.parse(br);
            JsonElement somedataElement  = parsedJson.getAsJsonObject().get("somedata");
            JsonObject jsonObject = somedataElement.getAsJsonObject();
            Set<Map.Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
            for(Map.Entry<String, JsonElement> entry : entrySet) {
                JsonElement loopElement = entry.getValue();
                JsonObject loopObject = loopElement.getAsJsonObject();
                System.out.println(loopObject.get("name").toString().replaceAll("\"", "")); //hier replaceAll von '"' weil die Ausgabe bei Strings "" enthält
            }
        } catch(FileNotFoundException fnfException) {
            System.out.println("File Not Found");
        }
    }

}
```

Trotzdem vielen Dank 

LG
Kenta1561


----------

