Seite 1 von 1

Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 8:29
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?

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 8:43
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

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 9:03
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?

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 13:30
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) ?

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 13:42
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

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 15:05
von ramses
Hallo Jan

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

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 15:25
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

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 16:04
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.

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 16:10
von Tom
Einfach Object erzeugen, alle Childs durchgehen und dann mit setNoIVar() das Object mit Leben füllen.
Äh. <blinzel>

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 22:35
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])
      .
      .

Re: Json2Var() und Var2Json()

Verfasst: Mi, 15. Feb 2023 23:02
von Jan
Hallo Werner,

an den XmlSimpleParser hatte ich auch erst gedacht. Der macht aber oftmals unnötig verschachtelte Objekte aus den XML.

Jan

Re: Json2Var() und Var2Json()

Verfasst: Fr, 17. Feb 2023 15:21
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 .....

Re: Json2Var() und Var2Json()

Verfasst: Fr, 17. Feb 2023 15:32
von Jan
Hallo Carlo,

Json2Var() erwartet einen UTF-8-String. Sonst gibt es einen Laufzeitfehler. Der konvertiert also nicht automatisch.

Jan

Re: Json2Var() und Var2Json()

Verfasst: Fr, 17. Feb 2023 15:45
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?

Re: Json2Var() und Var2Json()

Verfasst: Fr, 17. Feb 2023 16:35
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

Re: Json2Var() und Var2Json()

Verfasst: Fr, 17. Feb 2023 16:57
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.

Re: Json2Var() und Var2Json()

Verfasst: Di, 21. Feb 2023 7:19
von ramses
So läufts. Richtig schnell.