PBToolboxAI v4 ← Site

json — n_pbt_json #

← Komponentenreferenz · Inhalt des Handbuchs

JSON Typ für Typ bauen — String, Zahl, Boolean, Array, verschachteltes Objekt — mit dem Escaping für Sie erledigt, dann eines zurücklesen entlang eines Pfades: of_load, of_get_string, of_type, of_count. Ein einziges Objekt baut Ihre Anfragen und liest Ihre Antworten. Alles in reinem PowerScript: keine Seite, keine Engine, PowerBuilder 10 inbegriffen.

▶ Live ansehen — Demoanwendung, Kachel JSON: die Ergebnisse, der zugehörige Code und diese Seite nebeneinander.


Kurzüberblick #

n_pbt_json ist autoinstantiate: als lokale Variable deklarieren, ohne create oder destroy. Es ist genau das Objekt, das intern die an die Engine gesendeten Nutzdaten baut — jetzt Ihrem Code angeboten, auf der Bau- und der Leseseite.

Schnellstart #

Nutzdaten bauen, dann eine Antwort zurücklesen — alles passt in eine lokale Variable:

// Local variables
n_pbt_json  lnv_json
string      ls_customer
double      ld_total

// Write : each member is typed and escaped for you - a path may have levels
lnv_json.of_set_string(/*path*/ "customer", /*value*/ "Ada")
lnv_json.of_set_number(/*path*/ "total", /*value*/ 690.50)
lnv_json.of_set_boolean(/*path*/ "paid", /*value*/ true)

// lnv_json.of_text() -> {"customer":"Ada","total":690.5,"paid":true}

// Read : load a response, reach values by path
lnv_json.of_load(/*json*/ '{"order":{"customer":"Ada","total":690.50}}')
IF lnv_json.of_is_valid() THEN
	ls_customer = lnv_json.of_get_string(/*path*/ "order/customer")   // Ada
	ld_total    = lnv_json.of_get_number(/*path*/ "order/total")     // 690.5
END IF

Ein Pfad sind die Schlüssel ab der Wurzel, verbunden mit /; ein Array-Index ist seine Position, ab 1 gezählt, wie jede Position der Bibliothek: order/lines/1 ist die erste Zeile, order/lines/0 bezeichnet nichts. Ein leeres Segment (a//b, /a) oder ein Index 0 auf einem Array bezeichnet nichts — ein Schreibvorgang lehnt es mit -5 ab — und ein Schlüssel, der ein / enthält, ist nicht adressierbar. Schreibt ein Objekt denselben Schlüssel zweimal, wird sein ERSTES Vorkommen gelesen und geschrieben — ein Browser behält das letzte.


Nutzdaten bauen #

MethodeRolle
of_add_string (string as_path, string as_value) → longHängt eine ZEICHENKETTE, für Sie maskiert, an das ARRAY unter as_path an. Das Array muss vorhanden sein: öffnen Sie es zuerst mit of_set_raw und einem leeren Array. Liefert 0, -4, wenn as_path fehlt oder kein Array ist, -5, wenn ein Segment von as_path leer oder ein Index 0 auf einem Array ist; eine Null-Zeichenkette wird leer geschrieben (für ein JSON-null: of_add_raw(as_path, "null"))
of_add_boolean (string as_path, boolean ab_value) → longHängt einen BOOLESCHEN Wert (true oder false, nie in Anführungszeichen) an das ARRAY unter as_path an. Das Array muss vorhanden sein: öffnen Sie es zuerst mit of_set_raw und einem leeren Array. Liefert 0, -4, wenn as_path fehlt oder kein Array ist, -5, wenn ein Segment von as_path leer oder ein Index 0 auf einem Array ist; ein Null-Wert schreibt null
of_add_number (string as_path, long al_value) → longHängt eine ZAHL (fünf Überladungen: integer, long, longlong, decimal, double — ein decimal und ein longlong behalten ALLE Stellen (die Cent eines Betrags, die letzte Stelle einer ID über 2^53), und ein Literal wie 690.50 ist ein decimal, geschrieben 690.5) an das ARRAY unter as_path an. Das Array muss vorhanden sein: öffnen Sie es zuerst mit of_set_raw und einem leeren Array. Liefert 0, -4, wenn as_path fehlt oder kein Array ist, -5, wenn ein Segment von as_path leer oder ein Index 0 auf einem Array ist; ein Null-Wert schreibt null
of_add_raw (string as_path, string as_json) → longHängt einen Wert, der BEREITS JSON ist (ein Objekt, ein Array) und für den Sie einstehen an das ARRAY unter as_path an. Das Array muss vorhanden sein: öffnen Sie es zuerst mit of_set_raw und einem leeren Array. Liefert 0, -4, wenn as_path fehlt oder kein Array ist, -5, wenn ein Segment von as_path leer oder ein Index 0 auf einem Array ist; ein leerer oder Null-Wert schreibt null. Der leere Pfad ist die WURZEL: of_load("[]") und dann of_add_raw("", …) baut ein Dokument, das ein Array ist (der Rumpf eines gebündelten API-Aufrufs). Viele Elemente nacheinander an dasselbe Array anzuhängen bleibt schnell
of_set_array (string as_path, string as_values[]) → longSCHREIBT ein ganzes ARRAY von Zeichenketten unter as_path aus einem PowerBuilder-Array, jedes Element maskiert. Ein leeres Array schreibt ein leeres, ein Null-Element eine leere Zeichenkette. Gleiche Pfadregel und gleiche Codes wie of_set_string
of_set_members (string as_fragment) → longFührt bereits anderswo gebildete Mitglieder an der WURZEL zusammen, durch Kommas verbunden. Ein leeres Fragment schreibt nichts. Liefert 0, -4, wenn die Wurzel des Dokuments kein Objekt ist
of_clear ( ) → longLeert das Dokument, um mit derselben Variablen ein anderes Objekt zu beginnen. Liefert 0
of_text ( ) → stringDas Dokument wie es ist (kompakt): das, was Sie gebaut (of_add_string, of_add_number...) oder geladen (of_load) haben, nach jeder Änderung — die einzige Ausgabe, bereit zum Senden, Speichern oder Zurückschreiben. of_pretty ist die eingerückte Form. {} wenn leer; der Aufruf leert nichts

Ein Dokument lesen #

MethodeRolle
of_load (string as_json) → longLädt einen JSON-Text zum Lesen. Liefert 0, wenn wohlgeformt, -5, wenn das Argument leer oder nur Leerraum ist (Leerzeichen, Tabulatoren, Zeilenumbrüche), -4, wenn es kein gültiges JSON ist oder mehr als 512 Ebenen verschachtelt (das Dokument wird dann verworfen). Parst in reinem PowerScript. Eine Bytereihenfolge-Markierung (U+FEFF) am Anfang, die einer als UTF-8 mit BOM gespeicherten Datei, wird übersprungen
of_is_valid ( ) → booleanWahr, wenn das Objekt ein Dokument hält: das letzte of_load war erfolgreich, oder seitdem wurde etwas geschrieben. Ein an of_set_raw / of_add_raw übergebener Wert wird nicht erneut geprüft
of_exists (string as_path) → booleanWahr, wenn am angegebenen Pfad ein Wert liegt — unterscheidet einen vorhandenen, aber leeren Wert von einem fehlenden
of_type (string as_path) → stringDer JSON-Typ am Pfad: object, array, string, number, boolean, null; leer, wenn abwesend
of_get_string (string as_path) → stringDer Wert am Pfad, als Text: ein String kommt dekodiert zurück, eine Zahl/Boolean/null als Text, ein Objekt oder Array als rohes JSON (mit of_load neu ladbar); ein doppelt geschriebener Schlüssel wird bei seinem ERSTEN Vorkommen gelesen
of_get_number (string as_path) → doubleDie Zahl am Pfad, als double — der Dezimalpunkt wird auf jeder Maschine beachtet (2.5 ist 2,5, nicht 2). 0, wenn abwesend; der Exponent wird aufgelöst (1e-7, 2.5E+3), 17 signifikante Stellen bleiben erhalten, führende Nullen des Exponenten eingeschlossen. Für einen Betrag oder eine ID, die alle Stellen behalten müssen: of_get_decimal oder of_get_longlong
of_get_decimal (string as_path) → decimalDie Zahl am Pfad, als decimal, aus dem TEXT der Zahl neu aufgebaut und nie über ein double: 12345678901234.56 kommt mit seinen Cent zurück, 2.5E-3 ist 0.0025. Höchstens 28 signifikante Stellen. 0, wenn abwesend, wenn der Wert keine Zahl ist oder über das hinausgeht, was ein decimal fasst
of_get_longlong (string as_path) → longlongDie Zahl am Pfad, als 64-Bit-Ganzzahl, aus ihrem Text neu aufgebaut und nie über ein double: eine Datenbank-ID wie 9007199254740993 kommt vollständig zurück. Nachkommastellen werden abgeschnitten (2.9 ergibt 2). 0, wenn abwesend, wenn der Wert keine Zahl ist oder außerhalb des Bereichs eines longlong liegt
of_get_boolean (string as_path) → booleanDer Boolean am Pfad: wahr nur für das JSON-Literal true
of_count (string as_path) → longDie Anzahl der Mitglieder des Objekts oder Elemente des Arrays am Pfad. Liefert -1, wenn der Wert skalar oder abwesend ist (unterscheidet ein leeres Array, 0, von einem fehlenden, -1). Mit of_name durchläuft man ein Objekt; ein Array wird über seinen Index im Pfad durchlaufen (rows/1, rows/2…)
of_name (string as_path, long al_index) → stringDer Name des al_index-ten Mitglieds (ab 1) des Objekts am Pfad — um die Schlüssel eines Objekts unbekannter Form zu lesen. Mit of_count durchläuft es das Objekt
of_get_array (string as_path, ref string as_values[]) → longAlle Elemente des Arrays am Pfad, der Reihe nach, in as_values (zuvor geleert) — jedes so, wie of_get_string es liest: ein String kommt dekodiert zurück, eine Zahl oder ein Boolean als Text, null als "", ein Objekt oder Array als rohes JSON (mit of_load in einem anderen n_pbt_json zu laden). "" ist die Wurzel. Liefert die Anzahl der Elemente (0 für ein leeres Array), -4, wenn am Pfad kein Array liegt (nichts, ein Objekt, ein Skalar), -5 bei einem leeren Segment (a//b)
of_pretty ( ) → stringDas Dokument — geladen oder gebaut — zum Lesen neu eingerückt (mehrere Zeilen, Tabulatoren) — ein Log, ein Textfeld. Leer, wenn keines da ist
of_pretty (long al_indent) → stringDas Dokument — geladen oder gebaut — mit al_indent Leerzeichen pro Ebene neu eingerückt (2 und 4 sind die üblichen Breiten). 0 schreibt es kompakt, auf einer Zeile und ohne Leerzeichen: der kleinste Text zum Speichern oder Senden. Leer, wenn kein Dokument da ist oder wenn al_indent negativ, größer als 16 oder null ist. of_pretty() ohne Argument behält die Tabulatoren
// Local variables
n_pbt_json  lnv_json
string      ls_tags[]
string      ls_compact
long        ll_count

// Read every element of an array at once, then store the document on one line
lnv_json.of_load(/*json*/ '{"customer":{"name":"Ada","tags":["vip","b2b"]}}')
ll_count = lnv_json.of_get_array(/*path*/ "customer/tags", /*values*/ ls_tags)   // 2 : vip, b2b

// The document on one line, without a space : the smallest text to store
ls_compact = lnv_json.of_pretty(/*indent*/ 0)

Ein Dokument ändern #

Die Schreib-Seite ändert das geladene Dokument an Ort und Stelle, dann liefert of_text das Ergebnis (kompakt) — das, was zurückgeschrieben wird. Die Setter ersetzen den Wert am Pfad oder fügen den letzten Schlüssel hinzu, wenn er einem Elternobjekt fehlt. Jeder liefert 0, -4 wenn der Elternteil fehlt oder vom falschen Typ ist, -5 bei leerem Pfad oder einem Index 0 auf einem Array. Ein Array auf dem Weg wird über einen VORHANDENEN Index durchquert (items/1/qty fügt qty dem ersten Element hinzu); angelegt wird immer nur ein Objektschlüssel. Ein null-Wert (Zahl, Boolean, leeres rohes JSON) wird als null geschrieben.

ElementRolle
of_set_string (string as_path, string as_value) → longSCHREIBT eine Zeichenkette unter as_path, für Sie maskiert. Der Pfad darf MEHRERE Ebenen haben (a/b/c): fehlende werden als OBJEKTE angelegt, und ein LEERES Dokument wird zu einem — Schreiben IST Bauen. Ein bereits vorhandener Wert wird ersetzt, wo immer er steht. Liefert 0, -4, wenn eine Ebene unterwegs ein Skalar ist oder ein Array ohne diesen Index (ein Array wird über einen vorhandenen Index durchquert: items/1/qty), -5 bei leerem Pfad, leerem Segment oder einem Index 0 auf einem Array. Eine Null-Zeichenkette wird leer geschrieben; für ein JSON-null: of_set_raw(as_path, "null")
of_set_number (string as_path, long al_value) → longSCHREIBT eine ZAHL unter as_path, der Dezimalpunkt erzwungen. Fünf Überladungen: integer, long, longlong, decimal, double — ein decimal und ein longlong behalten ALLE Stellen (die Cent eines Betrags, die letzte Stelle einer ID über 2^53), und ein Literal wie 690.50 ist ein decimal, geschrieben 690.5. Gleiche Pfadregel und gleiche Codes wie of_set_string; ein Null-Wert schreibt null
of_set_boolean (string as_path, boolean ab_value) → longSCHREIBT einen BOOLESCHEN Wert unter as_path: true oder false, nie in Anführungszeichen. Gleiche Pfadregel und gleiche Codes wie of_set_string; ein Null-Wert schreibt null
of_set_raw (string as_path, string as_json) → longSCHREIBT unter as_path einen Wert, der BEREITS JSON ist — ein verschachteltes Objekt, ein Array, null — so wie er ist: Sie stehen dafür ein. So wird auch ein Array vor of_add_* GEÖFFNET. Gleiche Pfadregel und gleiche Codes wie of_set_string; ein leerer oder Null-Wert schreibt null
of_remove (string as_path) → longEntfernt den Wert am Pfad — ein Objektmitglied (sein Schlüssel und ein Komma gehen mit) oder ein Array-Element; das Ergebnis bleibt gültig. Liefert 0, -4, wenn dort nichts ist, -5 bei leerem Pfad, leerem Segment oder einem Index 0 auf einem Array
// Local variables
n_pbt_json  lnv_json

// Load, edit in place, then read back the ONE document with of_text
lnv_json.of_load(/*json*/ '{"name":"Ada","active":false}')
lnv_json.of_set_string(/*path*/ "name", /*value*/ "Grace")   // replace
lnv_json.of_set_boolean(/*path*/ "active", /*value*/ true)
lnv_json.of_set_number(/*path*/ "count", /*value*/ 3)        // added : the key was absent

// lnv_json.of_text() -> {"name":"Grace","active":true,"count":3}

Umfang. JSON parst in reinem PowerScript, ohne Seite oder Engine: n_pbt_json bleibt autoinstantiate und funktioniert überall, PowerBuilder 10 inbegriffen. Für XML siehe xml (das auf die Engine baut); um ein JSON als aufklappbaren Baum zu zeigen, siehe jsontree.

← Komponentenreferenz · Inhalt des Handbuchs