GSON-Parser

Kenta1561

Bekanntes Mitglied
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:
JSON:
{
"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:
JSON:
{
      "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

Super-Moderator
Mitarbeiter
Du kannst einfach eine Map als Typ vonsomedata 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 ;)
 

mrBrown

Super-Moderator
Mitarbeiter
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.
 

Flown

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

Java:
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

Bekanntes Mitglied
@Flown
Danke für deine Antwort :D Ich habe deine Antwort nicht gesehen und habe in der Zwischenzeit selber nochmal rumprobiert und habe es selber irgendwie geschafft:
Java:
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 :D

LG
Kenta1561
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F gson nicht in UTF8 XML & JSON 3
W GSON Enum Deserialisierung XML & JSON 3
K JSON mit GSON nutzen XML & JSON 4
4a61766120617274697374 gson Propleme bei Stringproperty XML & JSON 3
J JSON zu Java mit der GSON Google API XML & JSON 0
M Gson Enum parsing XML & JSON 0
A GSON - Liste mit Interfaces XML & JSON 4
W Json von URL Lesen (mit Gson Library) XML & JSON 3
pkm Gibt es XML-Parser-Bibliotheken XML & JSON 3
B XML-Daten mit SAX Parser verarbeiten in Java XML & JSON 4
MiMa SAX-Parser beenden? XML & JSON 5
K XML-Parser vs. XLST XML & JSON 4
L DOM Parser Implementieren XML & JSON 9
M SAX Parser implementieren XML & JSON 2
E Gibt es denn einen XML-Parser für JUnit-Tests? XML & JSON 6
D XSD Parser XML & JSON 1
T Neuer XML Parser!!! XML & JSON 33
J XML Parser anhand xsd erzeugen XML & JSON 2
H SAX Parser optimieren XML & JSON 5
H Sax Parser verschluckt teile XML & JSON 11
C XML SAX Parser XML & JSON 10
R Handler-Wechsel, SAX Parser bricht nach 8192 Byte ab XML & JSON 5
B SAX-Parser - Dokumente einlesen und in einer Map ablegen XML & JSON 2
S Sax Parser Performance XML & JSON 2
M Eigener XML-Parser XML & JSON 1
S Typsicherer HTML-Parser XML & JSON 5
S HTML Parser XML & JSON 2
B Parser und Fabrik XML & JSON 6
F SAX Parser siehe nichts auf dem Konsole weder eine Fehlermeldung noch eine Ergebnis XML & JSON 6
enne87 SAX-Parser XML & JSON 5
C Mit SAX Parser XML Attribute auswerten XML & JSON 3
H XML-Parser: geparste Strings in Konstruktor? XML & JSON 9
S DOM Parser XML & JSON 12
S Sax Parser XML & JSON 3
D Speicherüberlauf bei character-Methode mit SAX-Parser XML & JSON 3
Y Welchen XML Parser / Klassen aus XSD generieren lassen XML & JSON 4
H Brauche ich einen speziellen XML-Parser? XML & JSON 2
M Unhierarchisches XML-File mit DOM-Parser auswerten XML & JSON 5
G XML Parser Fehler, zwei gleiche kind-Elemente XML & JSON 7
S Welcher XML-Parser am besten? XML & JSON 4
S Parser XML & JSON 2
S JAVA XML Parser der einen String parst XML & JSON 3
Noar XML-Parser mit GUI? XML & JSON 2
R Problem mit SAX-Parser characters() XML & JSON 7
K SAX Parser Character Puffer zu klein XML & JSON 2
B Mit Sax-Parser validieren XML & JSON 7
Wildcard xpath Parser XML & JSON 8

Ähnliche Java Themen


Oben