Json2Var() und Var2Json()

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Json2Var() und Var2Json()

Beitrag von ramses »

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?
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Json2Var() und Var2Json()

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Json2Var() und Var2Json()

Beitrag von Tom »

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
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Json2Var() und Var2Json()

Beitrag von ramses »

Jan hat geschrieben: Mi, 15. Feb 2023 8:43 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()).
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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Json2Var() und Var2Json()

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Json2Var() und Var2Json()

Beitrag von ramses »

Hallo Jan

danke für die Ausführungen.
Ich beginne jetzt auch mal mit diesen Funktionen ...
Valar Morghulis

Gruss Carlo
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Json2Var() und Var2Json()

Beitrag von Manfred »

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
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!!
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Json2Var() und Var2Json()

Beitrag von Werner_Bayern »

Tom hat geschrieben: Mi, 15. Feb 2023 9:03 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?
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!>
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Json2Var() und Var2Json()

Beitrag von Tom »

Einfach Object erzeugen, alle Childs durchgehen und dann mit setNoIVar() das Object mit Leben füllen.
Äh. <blinzel>
Herzlich,
Tom
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Json2Var() und Var2Json()

Beitrag von Werner_Bayern »

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!>
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Json2Var() und Var2Json()

Beitrag von Jan »

Hallo Werner,

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.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Json2Var() und Var2Json()

Beitrag von ramses »

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 .....
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Json2Var() und Var2Json()

Beitrag von Jan »

Hallo Carlo,

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.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Json2Var() und Var2Json()

Beitrag von ramses »

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?
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Json2Var() und Var2Json()

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Json2Var() und Var2Json()

Beitrag von ramses »

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.
Nein, Sinn der Sache sicher nicht. Aber vielleicht eine Lösung. Mache weitere Versuche.
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Json2Var() und Var2Json()

Beitrag von ramses »

So läufts. Richtig schnell.
Valar Morghulis

Gruss Carlo
Antworten