JSON in Java

Traxter

Mitglied
Hallo allerseits,


Ich Versuche momentan die JSON Response eines HTTP Requestst zu verarbeiten und habe auch einige Librarys getestet die mit unzähligen Funktionen glänzen um JSON in Java zu verarbeiten. Das einzige was ich möchte ist aber besagtes JSON Object in ein JAVA Object oder Array zu "konvertieren" um dann mit ganz normalen Javawerkzeugen weiter zu arbeiten ohne weiterhin auf die Funktionen einer JSON Library angewiesen zu sein.

Kann mir da jemand einen Tip geben ? Per google findet man nämlich den Wald vor lauter Bäumen nicht was dieses Thema betrifft.




Mit freundlichen Grüßen

Traxter
 
Zuletzt bearbeitet:

dzim

Top Contributor
Ich nehm gerne Jackson, damit sollten dir die Prominentesten (GSON und Jackson) genannt worden sein, ansonsten stimmt es schon, dass es die am Ende wie Sand am Meer gibt...
 

Traxter

Mitglied
Allein auf der json Seite werden an die 200 json librarys genannt, naja^^


Eine frage hätte ich dann doch noch nachdem ich mich jetzt mit gson auseinandergesetzt habe da ich eine sache nicht ganz verstehe.In diesem beispiel wird ein json tree aufgebaut, dann in json formatiert und wieder zurück. Allerdings scheitert es bei mir schon daran das selbst das Beispiel nicht funktioniert da "Folder" immer als Fehler markiert wird. Was ist Folder in diesem Beispiel und und warum wird am ende .class dran gehangen ?

Code:
Folder root = new Folder // Was ist Folder ?
("/",
        new Folder("tmp",
                new File("cache.tmp", time)),
        new Folder("opt",
                new Folder("Chrome",
                        new File("chrome", 123456))),
        new Folder("home",
                new Folder("john"),
                new Folder("kate"))                
);
    
Gson gson = new Gson();
String json = gson.toJson(root);
    
Folder outputRoot = gson.fromJson(json, Folder.class);// Warum wird hier an Folder ein class gehängt ?

Bis vorgestern hatte ich nur erfahrungen mit javascript,pawn c,autoit und ein wenig php....deshalb ist Java noch etwas verwirrend für mich.
 
Zuletzt bearbeitet:

Traxter

Mitglied
Okay hat sich erledigt, habe mich mal damit auseinandergesetzt was es bedeutet ein Java Object zu erstellen und es dann auch mit gson geschafft die JSON Daten in ein Java Object zu laden :)

Vielen Dank nochmal für den Tip.
 
Zuletzt bearbeitet:

Traxter

Mitglied
Was Folder bedeutet weiß ich auch ohne Wörterbuch......wie schon gesagt wusste ich vorher nicht was ein Java Object überhaupt genau ist und schon garnicht das ich einem JSON String/Object den ich in ein Java Object stecken möchte erstmal eine riesen vorlage bauen muss um ihn zu verwursten. In Javascript gibts dafür nämlich einen ganz simplen Befehl, Json.parse() und schon kann man nach belieben darauf zugreifen, das ist hier allerdings etwas anders.Werde mich mal weiter mit Javagrundlagen beschäftigen.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
wie schon gesagt wusste ich vorher nicht was ein Java Object überhaupt genau ist

aiaiai.....klingt stark nach Grundlagen übersprungen !? ^^


Werde mich mal weiter mit Javagrundlagen beschäftigen.

Genau das solltest du machen wenn du dich intensiver mit OOP beschäftigen musst / möchstest :)

Wobei der umgekehrte Weg der Bessere ist , erst mit OOP auseinandersetzen dann Libs's und API's nutzen um spezielle dinge wie Persistente Speicherung von Objekten und dessen Zuständen zu realisieren, egal ob mit JSON, Standard-Serialisierung, oder oder oder :)
 
Zuletzt bearbeitet:

Traxter

Mitglied
Ja ich habe die letzten Jahre immer ein bischen von jedem gemacht weshalb ich mich bisher in jeder Sprache auch gut zurecht gefunden habe da man überall parallelen findet und alle ein bischen was gemeinsam haben aber jetzt wollte ich endlich mal was ordentliches lernen um über die Grenzen von Scriptsprachen hinaus zu gehen und da kam für mich nur C++ oder Java in Frage. Letztendlich hab ich mich dann für Java entschieden.




Wäre aber nett wenn sich jemand der GSON kennt mal mein aktuelles problem ansehen könnte.

Das hier ist besagtes JSON Object welches ich per https request bekomme.

Code:
{
  "arguments": {
    "offset": 1,
    "count": "3"
  },
  "total": "77",
  "results": [
    {
      "data_id": "2017923",
      "sell_price": "3076",
      "buy_price": "1704"
    },
    {
      "data_id": "312164",
      "sell_price": "3200",
      "buy_price": "2103"
    },
    {
      "data_id": "323466",
      "sell_price": "3220",
      "buy_price": "1876"
    }
  ]


Wichtig sind für mich nur die Results und an diese komme ich folgendermaßen ->

Code:
String jsonresponse = responsebuffer.toString();   
JsonObject root = new JsonParser().parse(jsonresponse).getAsJsonObject();
JsonArray itemarray = root.getAsJsonArray("results");
for (int i = 0; i < itemarray.size(); i++) 
{
JsonObject itemdaten = itemarray.get(i).getAsJsonObject();
 System.out.printf("ID: %s - Sellprice: %s - Buyprice: %s\n", itemdaten.get("data_id").toString(), itemdaten.get("sell_price").toString(), itemdaten.get("buy_price").toString());
}


Als output bekomme ich aber immer nur 1 result was daran liegt das die results ein nested array in einem Object darstellen und duplicate fieldnames haben.

Output:
Code:
ID: "20199" - Sellprice: "2738" - Buyprice: "1838"



Jetzt ist natürlich meine Frage wie ich an die restlichen results komme ? Hat da jemand eine Idee ?
 
Zuletzt bearbeitet:

dzim

Top Contributor
Also mit Jackson geht das immer in etwa so:
Java:
public class ResponseModel {
  private Arguments arguments;
  private String total; // sieht nach String im json aus
  private List<Result> results;
}

public class Arguments {
  private int offset;
  private String count; // sieht nach String im json aus
}

public class Result {
  // Anmerkung: Unterstriche "_" macht man eigentlich nur selten in Java (ist ja kein C/++)
  // ich verwende sie nur, da ich sonst noch Jackson-spezifische Annotationen anwenden müsste
  private String data_id; // sieht nach String im json aus
  private String sell_price; // sieht nach String im json aus
  private String buy_price; // sieht nach String im json aus
}
Jedes ist natürlich eine eigenständige Klasse in einer eigenen Datei.
Getter und Setter spar ich mir hier, wobei ich beim Getter für dei "results"-Liste folgendes machen würde:
Java:
public List<Result> getResults() {
  if (results == null) {
    results = new ArrayList<Result>();
  }
  return results;
}
Einen Setter brauch man dann eigentlich nicht mehr. (Vom Java-internen JAXB für XML-Verarbeitung so "gelernt".)

Das Mapping (denn dafür ist ja das Objekt-Relationale-Mapping gedacht), wird in etwa Jackson so gemacht:
Java:
public static ResponseModel readResponseModel(String source) throws JsonParseException, JsonMappingException, FileNotFoundException, IOException {
  ResponseModel response = null;
  ObjectMapper mapper = new ObjectMapper();
  response = mapper.readValue(source, ResponseModel.class);
  return response;
}
Statische Hilfsmethode (siehe Grundlagen in Java...) - muss man sich nur noch um das fangen eventueller Fehler kümmern.
 

eRaaaa

Top Contributor
In Gson funktioniert das ähnlich. Das was du (Traxter) da zusammenbaust ist viel zu umständlich und nicht wirklich objektbasiert.
Wenn man die drei Klassen von dzim nimmt, reicht in Gson ebenfalls ein
Java:
		ResponseModel response = new Gson().fromJson(responsebuffer.toString(), ResponseModel.class);
		for (Result result : response.getResults()) {
			System.out.println(result); //oder eben per getter zugreifen etc...
		}
Vorteil: DU hast deine JSON Objekte in Java Objekte 1:1 abgebildet und kannst dann mit entsprechenden Methoden auf die Objekte/Eigenschaften/etc zugreifen.

btw: auch in Gson kann man Annotationen verwenden bezüglich der naming conventions :p
 

Traxter

Mitglied
Eure Antworten waren sehr hilfreich und bringen mich auf jeden Fall ein ganzes Stück weiter die mechaniken zu verstehen.

Mein erster Versuch war ebenfalls das json object 1:1 in ein java object zu packen was aber nur beagrenzt funktioniert hat.Bei den Results habe ich nämlich einen error bekommen welche partout nicht in das Java Object wollten was aber sicher an einem Fehler meinerseit lag und somit stand ich wieder am Anfang. Also alles gelöscht und den Fall nochmal neu aufgerollt.


Habe eure Beispiele jetzt zusammengesetzt welche mir auch einleuchten aber die getResults() Methode im Code von eRaaaa lässt sich nicht anwenden.


Code:
ResponseModel response = new Gson().fromJson(responsebuffer.toString(), ResponseModel.class);
for (Result result : response.getResults  ()) 
{
System.out.println(result);
}
Method "getResults" not found


Habt ihr dazu eventuell auch noch eine Lösung ?
 
Zuletzt bearbeitet:

Traxter

Mitglied
Habe es nun endlich hinbekommen, allerdings ganz anders wie ihr es mir aufgezeigt habt ( danke für eure mühe). Habe meine zuletzt gepostete Methode genommen welche mir immer nur 1 Ergebnis geliefert hat, diese etwas abgeändert sodass ich jetzt ein JSON Array mit allen Ergebnissen erhalte und dann per Schleife die wichtigen Daten analysiere und extrahiere um diese dann weiter zu verarbeiten.Sobald ich das ganze etwas optimiert habe werde ich den code als Lösung hier posten und das Thema als erledigt markieren.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
BATMAN_2008 Jackson adding additional fields to JSON throws java.util.concurrent.CompletionException: Java Basics - Anfänger-Themen 2
F POST-Request mit json - Abfrage mit Java Java Basics - Anfänger-Themen 2
Joew0815 Interface JSON Objekte aus Java Objekten erzeugen Java Basics - Anfänger-Themen 9
F JSON to JAVA (und vice versa) Java Basics - Anfänger-Themen 2
C Java, Javascript, Dojox und JSON Java Basics - Anfänger-Themen 4
I JSON in Objekt umwandeln Java Basics - Anfänger-Themen 3
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
V JSON-Objs aus JSON-Obj filtern und löschen (Manipulation ohne Kenntnis der vollst. Struktur) Java Basics - Anfänger-Themen 12
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
S JSON einlesen und benutzen Java Basics - Anfänger-Themen 5
I JSON und Interface Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
J Json Datei auslesen Java Basics - Anfänger-Themen 4
J JSON-HashMap Java Basics - Anfänger-Themen 3
P JSON-Array auf Excel-Spalten verteilen? Java Basics - Anfänger-Themen 5
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
P Ressourcen für JSON & API Informationen? Java Basics - Anfänger-Themen 1
D JSON in JSOUP ELEMENTS Java Basics - Anfänger-Themen 1
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
S JSON Datei schreiben und lesen Java Basics - Anfänger-Themen 3
F Kann JSON nicht deserialisieren Java Basics - Anfänger-Themen 0
R JSON Array Java Basics - Anfänger-Themen 4
E Erste Schritte Wie führe ich org.json.jar aus? Java Basics - Anfänger-Themen 6
M JSON Format Java Basics - Anfänger-Themen 5
I JSON Datei in Array umwandeln Java Basics - Anfänger-Themen 1
A JSON Lesen und Schreiben. Java Basics - Anfänger-Themen 3
L Jackson JSON parsen Java Basics - Anfänger-Themen 7
A JSON versenden Java Basics - Anfänger-Themen 2
N JSON - komme nicht weiter Java Basics - Anfänger-Themen 2
Y Fehler in Json Datei Java Basics - Anfänger-Themen 4
F JSON null macht mir ein Problem Java Basics - Anfänger-Themen 3
N Suchfeld, JSON Java Basics - Anfänger-Themen 2
F JSON in dokumentierten Format als PDF Java Basics - Anfänger-Themen 3
P JSON-Konfigurationsdatei verwenden: Probleme mit Pfad Java Basics - Anfänger-Themen 1
J JSON Java Basics - Anfänger-Themen 2
F JSON von XBMC Java Basics - Anfänger-Themen 1
J String aus Json File parsen Java Basics - Anfänger-Themen 6
B Best Practice JSON Datei zerlegen Java Basics - Anfänger-Themen 1
C XML und/oder JSON Java Basics - Anfänger-Themen 3
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
L Input/Output JSON Objekt abrufen und ausgeben Java Basics - Anfänger-Themen 9
D JSON Java Basics - Anfänger-Themen 4
R JSON - Ausgabe als HTML mit gson Java Basics - Anfänger-Themen 6
M JSON Datensätze aus Website in Tabelle Java Basics - Anfänger-Themen 17
S JSON String in Object umwandeln Java Basics - Anfänger-Themen 3
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben