Seite 1 von 1

JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 12:48
von Jan
Ich hab da mal 'ne Frage. Als bekennender und bekannter Klassen-Doofy.

Wenn ich mit ot4xb einen JSON-String einlese, dann kann ich ja die Werte z. B. so abfragen: cName := oJsonObject:adresse:name. Das Problem: Wenn es :name nicht gibt, dann scheppert das natürlich zur Laufzeit. Wie kann ich das vorher abfragen? Es gibt ja so Nettigkeiten wie isMethod(), isMemvar(), isMembervar(). Die hier aber entweder nicht zutreffen oder nicht funktionieren. Was wäre da die korrekte Funktion für?

Jan

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 13:12
von Bertram Hansen
Hallo Jan,

so aus dem Bauch raus.
Kannst du das nicht über die Errorsys abfangen und entsprechend reagieren.

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 13:14
von Jan
Hallo Bertram,

da würde ich das vermutlich eher über Sequenze und Errorblock machen.

Ich hatte aber gehofft, da gäbe es einen direkteren Weg.

Jan

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 14:12
von Werner_Bayern
Servus Jan,

ich mach das so:

Code: Alles auswählen

 if empty((xTemp := oJson:get_prop("data")))
   // gibt's nicht oder kein Wert
else
   // alles ok
endif

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 14:20
von Jan
Hallo Werner,

ah. OK, das Zauberwort heißt also get_prop(). Werd ich gleich mal testen, im Moment läuft der noch mit dem Errorblock durch. Geht auch, ist aber ein wenig krude und radikal und irgendwie schlechter Stil.

Danke für den Tipp.

Jan

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 14:29
von Martin Altmann
Das ist kein schlechter Stil!
Das ist genau eine von zwei möglichen Arten, zu programmieren - offensives und defensives programmieren. Deine jetzige Variante wäre die offensive.

Viele Grüße,
Martin

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 14:39
von Jan
Martin,

dann bin ich vielleicht nicht offensiv genug. Mir behagt es nicht meinen Code bewußt in einen abgefangenen Fehler laufen zu lassen. Auch wenn das geht und erlaubt ist. Klar gibt es immer Ausnahmen, manchmal geht das eindeutig nicht anders. Aber wenn ich das mit einer einfachen Abfrage wie von Werner gezeigt machen kann, dann fühl ich mich da doch wesentlich besser bei.

Jan

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 14:46
von brandelh
und flexibler, in der Errorsys regle ich nur, was wirklich immer so sein muss (z.B. Division durch 0 - ist ja eigentlich nicht erlaubt, wir brauchen aber eine 0 als Antwort).

In dem JSON Fall, kann es ja sein, dass in einem Programm oder gar Programmteil genau die Felder vorhanden sein müssen,
sonst muss man alles abweisen und in einem anderen einfach "" als Standard akzeptiert wird.

Wenn ich sowas machen müsste, würde ich eine Klasse schreiben die sich um alle internen Regeln kümmert und von außen einfach zu bedienen ist.

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 14:58
von Tom
Ich bin da bei Martin - das ist kein schlechter Stil, sondern aus bestimmten Blickwinkeln sogar ein ziemlich eleganter. Ich verwende beispielsweise auch "IsFieldVar", um herauszubekommen, ob die gerade verwendete Tabelle mandantenbezogen sein kann oder nicht, und ich frage das dadurch bei vielen Tabellen, die nie mandantenbezogen sein können, aber das ist egal. Hauptsache, bei diesen Tabellen wird in diesem Moment ein Inhalt abgeprüft, und das geschieht immer und völlig zuverlässig, ganz egal, ob neue Tabellen hinzukommen. Ähnliche Anwendungsgebiete haben "NoMethod" und, ja, auch ValType() und Type().

Das Problem bei der Sequenz besteht einzig darin, dass sie das Fehlersystem aushebelt. Tritt also in der Sequenz ein anderer Fehler als der erwartete - es gibt die Instanz nicht - auf, so erfährt man das möglicherweise nie.

Boris hat im neuesten Xb2.Net übrigens auch einige JSON-Funktionen veröffentlicht.

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 15:13
von Jan
Tom,

das ist das, was ich meinte. Ich mach sowas halt lieber mit einer genau dafür vorgesehenen Funktion oder Methode, als mit der Brechstange einfach alles wegzufegen. Das manchmal die Brechstange trotzdem der beste Weg ist, ist auch meinerseits durchaus akzeptiert.

Jan

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 15:15
von Jan
Tom hat geschrieben: Fr, 17. Nov 2017 14:58Boris hat im neuesten Xb2.Net übrigens auch einige JSON-Funktionen veröffentlicht.
... und wenn Alaska endlich mal in die Puschen kommen würde, gäbe es das auch schon in Xbase++. Die Var2JSON() gibt es sogar schon, ist nur nicht dokumentiert. Und die JSON2Var() fehlt noch immer komplett. Obwohl Frank mir die schon vor drei Jahren zugesagt hatte. Zeit ist halt immer noch relativ.

Jan

Re: JSON mit ot4xb

Verfasst: Fr, 17. Nov 2017 16:01
von Werner_Bayern
var2json funktioniert schon, wandelt aber ungefragt den Zeichensatz. Hab das letzte Woche an Alaska gemeldet.

Code: Alles auswählen

                     cAktion := DataObject():new()
                     cAktion:name := "Test"
                     cAktion:ordernumber := "Test2"
                     cAktion:taxId := 1
                     cAktion:mainnumber := "Test2"
                     xTemp := DataObject():new()
                     xTemp:number := "A213"
                     cAktion:mainDetail := xTemp

                     cJson := var2json(cAktion)
Sowas geht bereits.

Re: JSON mit ot4xb

Verfasst: Do, 18. Jan 2018 13:21
von Werner_Bayern
Servus,

weiß jemand, wie man eine Prop wieder löscht? Sowas wie

Code: Alles auswählen

oJson:del_prop("brauchdichdochnicht")

Re: JSON mit ot4xb

Verfasst: Do, 18. Jan 2018 14:43
von brandelh
Werner_Bayern hat geschrieben: Fr, 17. Nov 2017 16:01 var2json funktioniert schon, wandelt aber ungefragt den Zeichensatz.
Ich speichere "äöü" einer OEM EXE in einer VAR vom Typ DataObject().
Rufe var2Json(oDO) auf und speichere die Rückgabe in einer Datei.
Egal welche Codierungen ich bei Notepad+ einstelle, da kommt nie "äöü" raus.

Was ist denn das für ein Zeichensatz ?

Re: JSON mit ot4xb

Verfasst: Do, 18. Jan 2018 14:45
von Werner_Bayern
brandelh hat geschrieben: Do, 18. Jan 2018 14:43 Was ist denn das für ein Zeichensatz ?
Konnte mir Alaska bisher auch nicht beantworten, wurde an die Entwicklungsabteilung weitergegeben.

Re: JSON mit ot4xb

Verfasst: Do, 18. Jan 2018 14:48
von brandelh
Gerade von Alaska würde ich erwarten, dass solche Funktionen intern den Zeichensatz abfragen (OEM / ANSI) und dann richtig z.B. auf UTF8 umsetzen ... falls das der richtige für jQuery ist.
Ich versuche meine Klassen nach außen unabhängig von der Einstellung zu halten.