JSON mit ot4xb

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
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:

JSON mit ot4xb

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: JSON mit ot4xb

Beitrag von Bertram Hansen »

Hallo Jan,

so aus dem Bauch raus.
Kannst du das nicht über die Errorsys abfangen und entsprechend reagieren.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
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: JSON mit ot4xb

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: JSON mit ot4xb

Beitrag 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
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: JSON mit ot4xb

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: JSON mit ot4xb

Beitrag 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
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
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: JSON mit ot4xb

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: JSON mit ot4xb

Beitrag 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.
Gruß
Hubert
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: JSON mit ot4xb

Beitrag 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.
Herzlich,
Tom
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: JSON mit ot4xb

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: JSON mit ot4xb

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: JSON mit ot4xb

Beitrag 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.
es grüßt

Werner

<when the music is over, turn off the lights!>
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: JSON mit ot4xb

Beitrag von Werner_Bayern »

Servus,

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

Code: Alles auswählen

oJson:del_prop("brauchdichdochnicht")
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: JSON mit ot4xb

Beitrag 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 ?
Gruß
Hubert
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: JSON mit ot4xb

Beitrag 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.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: JSON mit ot4xb

Beitrag 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.
Gruß
Hubert
Antworten