Json2Var() und Var2Json()
Moderator: Moderatoren
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2466
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 60 Mal
Json2Var() und Var2Json()
Hallo zusammen
ich muss einem Projekt ein neues Feature hinzufügen darin wird mit grösseren JSON Datenstätzen in JavaScript Notation gearbeitet.
Es gibt ja in Xbase++ jetzt auch die Funktionen Json2Var() und Var2Json() die vermutlich einiges schneller sind als meine bisherigen in XBase++ Code geschriebenen JSON En- und Decoder.
Sind euch da irgendwelche Probleme bekannt die in einem WebServer auftreten können oder sind Vorprüfungen/Vorsichtsmasnahmen der übers WWW eingehenden JSON Daten erforderlich?
Läuft das Decodieren in DataObjekte Problemlos?
Wie sind eure Erfahrungen?
ich muss einem Projekt ein neues Feature hinzufügen darin wird mit grösseren JSON Datenstätzen in JavaScript Notation gearbeitet.
Es gibt ja in Xbase++ jetzt auch die Funktionen Json2Var() und Var2Json() die vermutlich einiges schneller sind als meine bisherigen in XBase++ Code geschriebenen JSON En- und Decoder.
Sind euch da irgendwelche Probleme bekannt die in einem WebServer auftreten können oder sind Vorprüfungen/Vorsichtsmasnahmen der übers WWW eingehenden JSON Daten erforderlich?
Läuft das Decodieren in DataObjekte Problemlos?
Wie sind eure Erfahrungen?
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Jan
- Marvin
- Beiträge: 14473
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 64 Mal
- Kontaktdaten:
Re: Json2Var() und Var2Json()
Moin,
ich arbeite damit sehr intensiv. Ohne Probleme.
Der einzige Punkt ist: Wenn die JSON Knoten hat mit einem "-" im Namen, dann mußt Du die umbenennen (ich mach das dann z. B. mit StrtTran()). Weil Xbase++ das sonst als Minuszeichen ansieht. Beispiel: Ich lese Mails ein. Da gibt es dann den "Content-Type". Das ändere ich um in "Content_Type". Danach klappt auch Json2Var() sauber.
Jan
ich arbeite damit sehr intensiv. Ohne Probleme.
Der einzige Punkt ist: Wenn die JSON Knoten hat mit einem "-" im Namen, dann mußt Du die umbenennen (ich mach das dann z. B. mit StrtTran()). Weil Xbase++ das sonst als Minuszeichen ansieht. Beispiel: Ich lese Mails ein. Da gibt es dann den "Content-Type". Das ändere ich um in "Content_Type". Danach klappt auch Json2Var() sauber.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9049
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 77 Mal
- Danksagung erhalten: 267 Mal
- Kontaktdaten:
Re: Json2Var() und Var2Json()
Wo wir gerade beim Thema sind - ich muss auf möglichst einfachem Weg aus XML JSON erzeugen. Ich habe eine VB-Funktion gefunden, die das mit der Unterstützung von Chilkat macht. Bevor ich die adaptiere - kennt jemand einen einfacheren Weg?
Herzlich,
Tom
Tom
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2466
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 60 Mal
Re: Json2Var() und Var2Json()
Hallo Jan
guter Tip! Danke.
Machst du vor dem Aufruf der Funktion Json2Var() einen Pausibilitätstest des JSON Strings oder fängst du die Laufzeit-Fehler die es bei korrupten Strings gibt mit in einer speziellen Sequenz Schleife ab?
Hast du Erfahung mit grösseren JSON Strings (viele hundert kurze Zahlen) ?
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Jan
- Marvin
- Beiträge: 14473
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 64 Mal
- Kontaktdaten:
Re: Json2Var() und Var2Json()
Hallo Carlo,
nein, eine Überprüfung mache ich vorher nicht. Da verlasse ich mich auf das was Json2Var() mir liefert. Da ich die JSON meist von extern bekomme als REST-Resonse kontrolliere ich nur, ob das überhaupt eine gültige Antwort ist. Das reicht bei mir in allen Situationen mit den verschiedensten Umgebungen absolut aus. Und wenn ich die ohnehin selber erstellt habe durch Var2Json() dann vertraue ich einfach darauf, das die passen müssen. Sonst hätte ja schon Var2Json() gemeckert.
Meine größten JSON waren bislang um die 1.000 Zeilen lang. Das läuft absolut reibungslos und schnell ab.
Jan
nein, eine Überprüfung mache ich vorher nicht. Da verlasse ich mich auf das was Json2Var() mir liefert. Da ich die JSON meist von extern bekomme als REST-Resonse kontrolliere ich nur, ob das überhaupt eine gültige Antwort ist. Das reicht bei mir in allen Situationen mit den verschiedensten Umgebungen absolut aus. Und wenn ich die ohnehin selber erstellt habe durch Var2Json() dann vertraue ich einfach darauf, das die passen müssen. Sonst hätte ja schon Var2Json() gemeckert.
Meine größten JSON waren bislang um die 1.000 Zeilen lang. Das läuft absolut reibungslos und schnell ab.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2466
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 60 Mal
Re: Json2Var() und Var2Json()
Hallo Jan
danke für die Ausführungen.
Ich beginne jetzt auch mal mit diesen Funktionen ...
danke für die Ausführungen.
Ich beginne jetzt auch mal mit diesen Funktionen ...
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Manfred
- Foren-Administrator
- Beiträge: 20764
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 54 Mal
Re: Json2Var() und Var2Json()
Hi Carlo,
ich habe die gleichen Aufgaben wie Du auch. Von Xbase (Dataobject) zu Javascript usw. Bisher keine Probleme damit gehabt. Ich war damals erstaunt, wie gut das klappt
ich habe die gleichen Aufgaben wie Du auch. Von Xbase (Dataobject) zu Javascript usw. Bisher keine Probleme damit gehabt. Ich war damals erstaunt, wie gut das klappt
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2054
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 22 Mal
- Danksagung erhalten: 51 Mal
Re: Json2Var() und Var2Json()
Geht auch ohne externe Tools, habe ich kürzlich mittels der Xbase++ - XML-Tools gemacht. Einfach Object erzeugen, alle Childs durchgehen und dann mit setNoIVar() das Object mit Leben füllen.
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9049
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 77 Mal
- Danksagung erhalten: 267 Mal
- Kontaktdaten:
Re: Json2Var() und Var2Json()
Äh. <blinzel>Einfach Object erzeugen, alle Childs durchgehen und dann mit setNoIVar() das Object mit Leben füllen.
Herzlich,
Tom
Tom
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2054
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 22 Mal
- Danksagung erhalten: 51 Mal
Re: Json2Var() und Var2Json()
Ich kann Dir leider keinen Code posten, da das auf einer alten XML-Klasse von uns aufbaut, die entstanden ist, als es XmlSimpleParser() noch nicht gab. Vom Prinzip her:
Code: Alles auswählen
#include "asxml.ch"
oWsdl := DataObject():new()
oXML := WEMA_XML():new(cWsdl, .f.)
if oXML:lFehler
return NIL
endif
i := oXML:getrootTag()
aTags := oXML:GetAllTags(i)
aTags := oXML:GetAllTags(aTags[XMLTAG_CHILD][1])
nAnzahl := len(aTags[XMLTAG_CHILD])
for i := 1 to nAnzahl
aAntwort := oXML:getTagContent(aTags[XMLTAG_CHILD, i])
cTag := substr(aAntwort[XMLTAG_NAME], rat(":", aAntwort[XMLTAG_NAME]) + 1)
if aAntwort[XMLTAG_CHILD] == NIL
oWsdl:setNoIVar(cTag, aAntwort[XMLTAG_ATTRIB])
.
.
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Jan
- Marvin
- Beiträge: 14473
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 64 Mal
- Kontaktdaten:
Re: Json2Var() und Var2Json()
Hallo Werner,
an den XmlSimpleParser hatte ich auch erst gedacht. Der macht aber oftmals unnötig verschachtelte Objekte aus den XML.
Jan
an den XmlSimpleParser hatte ich auch erst gedacht. Der macht aber oftmals unnötig verschachtelte Objekte aus den XML.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2466
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 60 Mal
Re: Json2Var() und Var2Json()
Hallo
anscheinend führen die beiden Funktionen zwangsmässig eine Character Konvertierung ANSI/OEM <--> UTF8 durch.
Weiss jemand wie sich dies verhindern / ausschalten lässt ?????
Ich habe schon Strings im UTF8 Zeichenatz eine erneute Konvertierung durch Var2Json() führt so zu Datensalat .....
anscheinend führen die beiden Funktionen zwangsmässig eine Character Konvertierung ANSI/OEM <--> UTF8 durch.
Weiss jemand wie sich dies verhindern / ausschalten lässt ?????
Ich habe schon Strings im UTF8 Zeichenatz eine erneute Konvertierung durch Var2Json() führt so zu Datensalat .....
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Jan
- Marvin
- Beiträge: 14473
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 64 Mal
- Kontaktdaten:
Re: Json2Var() und Var2Json()
Hallo Carlo,
Json2Var() erwartet einen UTF-8-String. Sonst gibt es einen Laufzeitfehler. Der konvertiert also nicht automatisch.
Jan
Json2Var() erwartet einen UTF-8-String. Sonst gibt es einen Laufzeitfehler. Der konvertiert also nicht automatisch.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2466
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 60 Mal
Re: Json2Var() und Var2Json()
Hallo Jan
ja das schon. Das Problem ist dass mir die Funktionen den Zeichensatz nicht ändern dürfen.
Ich habe UTF8 Strings von der Datenbank wenn ich mit Var2Json() ein Jsonstring erstelle hat der Datemüll drin durch die automatische Konvertierung welche die Funktion ausführt.
Ich muss für beide Wege die automatsiche Zeichensatz Konvertierung ausschalten können da ich ja auch im Programm mit UTF8 Zeichensatz arbeite.
Weisst du wie das geht?
ja das schon. Das Problem ist dass mir die Funktionen den Zeichensatz nicht ändern dürfen.
Ich habe UTF8 Strings von der Datenbank wenn ich mit Var2Json() ein Jsonstring erstelle hat der Datemüll drin durch die automatische Konvertierung welche die Funktion ausführt.
Ich muss für beide Wege die automatsiche Zeichensatz Konvertierung ausschalten können da ich ja auch im Programm mit UTF8 Zeichensatz arbeite.
Weisst du wie das geht?
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Jan
- Marvin
- Beiträge: 14473
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 64 Mal
- Kontaktdaten:
Re: Json2Var() und Var2Json()
Hallo Carlo,
das geht nicht. Es gibt keinen Parameter dafür bei den Funktionen.
Aber ich versteh auch das Problem irgend wie nicht. Json2Var() erwartet ein UTF-8. Was wird denn da dann doppelt konvertiert? Der konvertiert doch nicht selber, sondern erwartet das schon korrekt.
Wenn Var2Json() konvertieren sollte könntest Du ja das DO mit Utf82Var(cString) füllen. Sicher irgend wie nicht der Sinn der Sache. Würde aber das Problem lösen.
Ich denke das Alaska nicht erwartet, das jemand generell mit UTF-8-Strings arbeitet. Denn Xbase++ ist halt intern immer nur OEM oder ANSI.
Jan
das geht nicht. Es gibt keinen Parameter dafür bei den Funktionen.
Aber ich versteh auch das Problem irgend wie nicht. Json2Var() erwartet ein UTF-8. Was wird denn da dann doppelt konvertiert? Der konvertiert doch nicht selber, sondern erwartet das schon korrekt.
Wenn Var2Json() konvertieren sollte könntest Du ja das DO mit Utf82Var(cString) füllen. Sicher irgend wie nicht der Sinn der Sache. Würde aber das Problem lösen.
Ich denke das Alaska nicht erwartet, das jemand generell mit UTF-8-Strings arbeitet. Denn Xbase++ ist halt intern immer nur OEM oder ANSI.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2466
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 60 Mal
Re: Json2Var() und Var2Json()
Nein, Sinn der Sache sicher nicht. Aber vielleicht eine Lösung. Mache weitere Versuche.Jan hat geschrieben: ↑Fr, 17. Feb 2023 16:35 Wenn Var2Json() konvertieren sollte könntest Du ja das DO mit Utf82Var(cString) füllen. Sicher irgend wie nicht der Sinn der Sache. Würde aber das Problem lösen.
Ich denke das Alaska nicht erwartet, das jemand generell mit UTF-8-Strings arbeitet. Denn Xbase++ ist halt intern immer nur OEM oder ANSI.
Valar Morghulis
Gruss Carlo
Gruss Carlo