Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   JSON Mapper (https://www.delphipraxis.net/174115-json-mapper.html)

Morphie 4. Apr 2013 15:11

JSON Mapper
 
Kennt jemand zufällig einen JSON-Mapper für Delphi?

JSON / REST ist für mich noch relativ neu, daher hier mal "laut gedacht":
Angenommen ich bekomme über eine REST-Architektur diverse JSON-Antworten geliefert und möchte diese Antworten in Klassen / Objekte übersetzen, dann kann ich bis jetzt ja mühsam den JSON-String parsen oder auf eine Bibliothek zurückgreifen und mich damit (ähnlich wie bei XML) durch die JSON-Antworten navigieren.

Da die Struktur der Antworten aber meist in einer API beschrieben ist, wäre ein "automatisches" Mappen doch ganz praktisch.

Ich definiere mir also auf Grundlage der API-Beschreibung alle JSON-Strings mit allen Required / Optional-Feldern, Arrays, Textfeldern, Datumsfelder,... und lasse auf "Knopfdruck" meine Delphi-Klassen generieren.
Diese Klassen verfügen dann z.B. über einen Constructor mit dem man die Klassen direkt mit dem JSON-String materialisieren kann...



Ich kenne das z.B. aus .NET und XML, da gibt es ein Tool mit dem aus XSD-Dateien Klassen generieren kann. Die passenden XML-Dateien lassen sich dann kinderleicht de/serialisieren und man kann danach wunderbar mit richtigen Objekten arbeiten...

Gibt es etwas vergleichbares auch in Delphi mit JSON?

BUG 4. Apr 2013 15:32

AW: JSON Mapper
 
Zitat:

Zitat von Morphie (Beitrag 1210008)
Ich kenne das z.B. aus .NET und XML, da gibt es ein Tool mit dem aus XSD-Dateien Klassen generieren kann. Die passenden XML-Dateien lassen sich dann kinderleicht de/serialisieren und man kann danach wunderbar mit richtigen Objekten arbeiten...

Gibt es etwas vergleichbares auch in Delphi mit JSON?

Soweit ich weiß, gibt es keine JSON-Schema-Beschreibungsstandards.
Das mit dem automatischen Klassen-Erstellen wird vermutlich nicht klappen.

mjustin 4. Apr 2013 15:57

AW: JSON Mapper
 
Für REST gibt es mit WADL etwas ähnliches wie WSDL, es ist eine allgemeine Web Service Beschreibungssprache. Ob die Objekte dann per JSON oder XML serialisiert werden ist sekundär. Anders gesagt, kann man auch eine XSD als Basis zur Klassenerzeugung nehmen, wenn man einen passenden Generator hat. Oder eine SQL DDL, auch dafür gibt es Klassengeneratoren.

Danach erst kommt der JSON Objektmapper ins Spiel. Hier gibt es keinen mir bekannten für Delphi, aber diverse für Java und .Net - mittels RTTI ist das Schreiben eines Mappers im Prinzip kein Problem, nur eine Zeitfrage.

Für Java gibt es zum Beispiel Jackson (http://sapandiwakar.wordpress.com/20...-jackson-json/)

Phoenix 5. Apr 2013 09:27

AW: JSON Mapper
 
Zitat:

Zitat von BUG (Beitrag 1210014)
Soweit ich weiß, gibt es keine JSON-Schema-Beschreibungsstandards.
Das mit dem automatischen Klassen-Erstellen wird vermutlich nicht klappen.

Dann helfe ich Deinem Wissen mal auf die Sprünge:

http://json-schema.org/

Der Newtonsoft.JSON Se-/Deserializer in .NET kann z.B. gegen JSON Schema validieren.

Ich weiss nicht, ob die Libraries hier das können oder nicht, aber vielleicht ist was passendes dabei:
http://sourceforge.net/projects/is-webstart/
http://sourceforge.net/projects/lkjson/
https://code.google.com/p/tiny-json/

Morphie 5. Apr 2013 09:45

AW: JSON Mapper
 
Wie verarbeitet ihr denn JSON? Hangelt ihr euch durch die einzelnen Elemente und lest die Daten aus? Oder mappt ihr die Daten auch erst in Klassen, um damit später weiterzuarbeiten? Oder gibt es vielleicht noch ganz andere Ansätze?

Ich denke so ein Mapper / (de)serialisierer würde einem viel Arbeit abnehmen... Vielleicht mal als Community-Projekt einführen? ;-)


OT:
Sowas vermisse ich hier in der DP sowieso... Also reine Community-Projekte, an die jeder freiwillig mitarbeiten kann...
Klar gibt es massenweise Open-Source-Projekte von Community-Mitgliedern hier, allerdings beschäftigt sich damit ja kaum einer...
Ziel von solchen Projekten sollte auch sein, Delphi weiterzubringen. Z.B. solche Projekte wie DSharp, himXML oder TEasyLinq<T>, die also für die Sprache selbst wertvoll sein können...

Ein Taschenrechnerprogramm oder ein weiteren Medienplayer würde ich als Community-Projekt jetzt nicht nehmen ;-)

Gab es in der DP schon mal sowas?

liquidsphere 8. Apr 2013 07:56

AW: JSON Mapper
 
Zitat:

Zitat von Morphie (Beitrag 1210008)
Kennt jemand zufällig einen JSON-Mapper für Delphi?

JSON / REST ist für mich noch relativ neu, daher hier mal "laut gedacht":
Angenommen ich bekomme über eine REST-Architektur diverse JSON-Antworten geliefert und möchte diese Antworten in Klassen / Objekte übersetzen, dann kann ich bis jetzt ja mühsam den JSON-String parsen oder auf eine Bibliothek zurückgreifen und mich damit (ähnlich wie bei XML) durch die JSON-Antworten navigieren.

Da die Struktur der Antworten aber meist in einer API beschrieben ist, wäre ein "automatisches" Mappen doch ganz praktisch.

Ich definiere mir also auf Grundlage der API-Beschreibung alle JSON-Strings mit allen Required / Optional-Feldern, Arrays, Textfeldern, Datumsfelder,... und lasse auf "Knopfdruck" meine Delphi-Klassen generieren.
Diese Klassen verfügen dann z.B. über einen Constructor mit dem man die Klassen direkt mit dem JSON-String materialisieren kann...



Ich kenne das z.B. aus .NET und XML, da gibt es ein Tool mit dem aus XSD-Dateien Klassen generieren kann. Die passenden XML-Dateien lassen sich dann kinderleicht de/serialisieren und man kann danach wunderbar mit richtigen Objekten arbeiten...

Gibt es etwas vergleichbares auch in Delphi mit JSON?

https://code.google.com/p/delphi-oop/
https://code.google.com/p/delphi-oop/wiki/SvSerializer

BUG 8. Apr 2013 14:18

AW: JSON Mapper
 
Zitat:

Zitat von Phoenix (Beitrag 1210055)
Dann helfe ich Deinem Wissen mal auf die Sprünge:
http://json-schema.org/

Danke :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz