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 Schreibvorgang lehnt es mit -5 ab. Eine Ebene wird so geschrieben, wie JSON Pointer (RFC 6901) sie schreibt: ~1 ist ein / des Schlüssels und ~0 ein ~ (paths/~1users liest den Schlüssel /users; of_escape_key wandelt einen Schlüssel um), eine leere Ebene ist der Schlüssel "" (a//b), und ein Pfad darf mit / beginnen — die vollständige Form des Zeigers, die einzige Art, den Schlüssel "" der Wurzel zu benennen (/). Schreibt ein Objekt denselben Schlüssel zweimal, wird sein ERSTES Vorkommen gelesen und geschrieben — ein Browser behält das letzte.
Nutzdaten bauen #
| Methode | Rolle |
|---|---|
of_add_string (string as_path, string as_value) → long | Hä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 eine Ebene von as_path 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) → long | Hä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 eine Ebene von as_path ein Index 0 auf einem Array ist; ein Null-Wert schreibt null |
of_add_number (string as_path, long al_value) → long | Hä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 eine Ebene von as_path ein Index 0 auf einem Array ist; ein Null-Wert schreibt null |
of_add_raw (string as_path, string as_json) → long | Hä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 eine Ebene von as_path 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[]) → long | SCHREIBT 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) → long | Führt bereits anderswo gebildete Mitglieder an der WURZEL zusammen, durch Kommas verbunden. Ein Schlüssel, den die Wurzel schon hat, bekommt seinen Wert an Ort und Stelle ersetzt, ein neuer wird am Ende angefügt, ein Schlüssel, den das Fragment wiederholt, behält seinen letzten Wert. Ein leeres Fragment schreibt nichts. Liefert 0, -4, wenn die Wurzel des Dokuments kein Objekt ist |
of_clear ( ) → long | Leert das Dokument, um mit derselben Variablen ein anderes Objekt zu beginnen. Liefert 0 |
of_text ( ) → string | Das 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 #
| Methode | Rolle |
|---|---|
of_load (string as_json) → long | Lä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. Bei einem negativen Code sagt of_get_last_error, wo der Text falsch ist (Zeile, Spalte), und of_error_position, bei welchem Zeichen. Ein Dokument darf ein einzelner Wert sein ("abc", 42, null): er wird am leeren Pfad gelesen, nichts wird hineingeschrieben |
of_is_valid ( ) → boolean | Wahr, 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) → boolean | Wahr, wenn am angegebenen Pfad ein Wert liegt — unterscheidet einen vorhandenen, aber leeren Wert von einem fehlenden |
of_type (string as_path) → string | Der JSON-Typ am Pfad: object, array, string, number, boolean, null; leer, wenn abwesend |
of_get_string (string as_path) → string | Der 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) → double | Die 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. Ein String zählt nur, wenn er vollständig eine JSON-Zahl ist: "12.50" ist 12,5, "12 kg" und "1,5" sind 0 |
of_get_decimal (string as_path) → decimal | Die 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; ein String zählt nur, wenn er vollständig eine Zahl ist ("12.50") |
of_get_longlong (string as_path) → longlong | Die 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; ein String zählt nur, wenn er vollständig eine Zahl ist ("12.50") |
of_get_boolean (string as_path) → boolean | Der Boolean am Pfad: wahr für das JSON-Literal true und für den String "true", den manche APIs schreiben; falsch für alles andere |
of_count (string as_path) → long | Die 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…). Bei jedem Schleifendurchlauf aufgerufen, kostet er nichts mehr, sobald das Array gezählt ist, Entfernungen eingeschlossen |
of_name (string as_path, long al_index) → string | Der 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. Um daraus eine Pfadebene zu machen: of_escape_key (ein Schlüssel kann ein / enthalten) |
of_escape_key (string as_key) → string | Ein SCHLÜSSEL als EINE Pfadebene geschrieben (JSON Pointer, RFC 6901): aus ~ wird ~0, dann aus / wird ~1 — der Schlüssel application/json ist die Ebene application~1json. Das braucht ein mit of_name gelesener Schlüssel, bevor er in einen Pfad kommt |
of_get_array (string as_path, ref string as_values[]) → long | Alle 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, wenn eine Ebene des Pfads ein Index 0 auf einem Array ist |
of_pretty ( ) → string | Das Dokument — geladen oder gebaut — zum Lesen neu eingerückt (mehrere Zeilen, Tabulatoren) — ein Log, ein Textfeld. Leer, wenn keines da ist oder wenn ein über of_set_raw gesetzter Wert mehr als 512 Ebenen verschachtelt (der Text wäre nicht das Dokument) |
of_pretty (long al_indent) → string | Das 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 oder ein über of_set_raw gesetzter Wert mehr als 512 Ebenen verschachtelt. 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 eine Ebene unterwegs ein Skalar ist oder ein Array ohne diesen Index, -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. Eine Schleife von Schreibvorgängen, hinzugefügten Schlüsseln oder Entfernungen in einem großen Dokument (2 000 Zeilen) bleibt schnell: jeder Aufruf liest nur, was er berührt.
| Element | Rolle |
|---|---|
of_set_string (string as_path, string as_value) → long | SCHREIBT 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. Ein Schlüssel mit / wird im Pfad ~1 geschrieben (of_escape_key). Eine Schleife von Schreibvorgängen in einem großen Dokument bleibt schnell. 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 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) → long | SCHREIBT 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) → long | SCHREIBT 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) → long | SCHREIBT 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) → long | Entfernt 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 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}
Datumswerte #
Ein Datum wird als ISO 8601 geschrieben und gelesen — so, wie APIs, Browser und Python es schreiben —, unabhängig vom Datumsformat des Rechners: ein Datum "2026-10-10", ein Zeitstempel "2026-10-10T14:30:00" (mit Sekundenbruchteil, wenn er nicht null ist), eine Uhrzeit "14:30:00". Ein Null-Wert schreibt null.
| Methode | Rolle |
|---|---|
of_set_date (string as_path, date ad_value) → long | SCHREIBT ein Datum unter as_path (yyyy-mm-dd). Dieselbe Pfadregel wie of_set_string: liefert 0, -4, wenn eine Ebene unterwegs ein Skalar oder ein Array ohne diesen Index ist, -5 bei leerem Pfad oder einem Index 0 auf einem Array |
of_set_datetime (string as_path, datetime adt_value) → long | SCHREIBT einen Zeitstempel (yyyy-mm-ddThh:mm:ss, der Sekundenbruchteil nach einem Punkt, wenn er nicht null ist). Keine Zeitzone wird geschrieben: die Uhrzeit ist die übergebene. Liefert 0, -4 oder -5, wie of_set_date |
of_set_time (string as_path, time at_value) → long | SCHREIBT eine Uhrzeit (hh:mm:ss). Liefert 0, -4 oder -5, wie of_set_date |
of_add_date (string as_path, date ad_value) → long | Hängt ein Datum an das ARRAY unter as_path an. Liefert 0, -4, wenn as_path fehlt oder kein Array ist, -5, wenn eine Ebene von as_path ein Index 0 auf einem Array ist |
of_add_datetime (string as_path, datetime adt_value) → long | Hängt einen Zeitstempel an das ARRAY unter as_path an. Liefert 0, -4 oder -5, wie of_add_date |
of_add_time (string as_path, time at_value) → long | Hängt eine Uhrzeit an das ARRAY unter as_path an. Liefert 0, -4 oder -5, wie of_add_date |
of_get_date (string as_path) → date | Das am Pfad geschriebene Datum ("2026-10-10" oder das Datum eines Zeitstempels). 1900-01-01, wenn der Wert fehlt, kein Datum ist oder einen Tag nennt, den es nicht gibt (2026-02-30); of_exists und of_type erkennen einen fehlenden Wert |
of_get_datetime (string as_path) → datetime | Der am Pfad geschriebene Zeitstempel: ein T oder ein Leerzeichen zwischen Datum und Uhrzeit, mit oder ohne Sekunden, mit Sekundenbruchteil oder ein Datum allein (Mitternacht). Ein Z oder ein Versatz (+02:00) wird gelesen und nicht angewendet: die Uhrzeit ist die geschriebene — rechnen Sie selbst um, wenn die Zeitzone zählt. 1900-01-01 00:00:00, wenn er fehlt oder kein Datum ist |
of_get_time (string as_path) → time | Die am Pfad geschriebene Uhrzeit ("14:30", "14:30:00", "14:30:00.250" oder die Uhrzeit eines Zeitstempels). 00:00:00, wenn sie fehlt, keine Uhrzeit ist oder ein Datum allein |
// Local variables
n_pbt_json lnv_json
date ld_due
datetime ldt_created
// Write : ISO 8601, whatever the date format of the machine
lnv_json.of_set_date(/*path*/ "due", /*value*/ Date(2026, 10, 31))
lnv_json.of_set_datetime(/*path*/ "created", /*value*/ DateTime(Date(2026, 10, 10), Time(14, 30, 0)))
// Read what an API writes : the Z is read, the hour stays the one written
lnv_json.of_load(/*json*/ '{"due":"2026-10-31","created":"2026-10-10T14:30:00Z"}')
ld_due = lnv_json.of_get_date(/*path*/ "due")
ldt_created = lnv_json.of_get_datetime(/*path*/ "created")
Ein DataStore als JSON und zurück #
PowerBuilder hat ExportJson und ImportJson erst ab 2017 R2. n_pbt_json macht es ab PowerBuilder 10, typisiert nach den Spalten: ein String, eine Zahl (ein decimal behält alle Stellen), ein Datum yyyy-mm-dd, ein Zeitstempel, eine Uhrzeit, null für ein NULL. Eine Überladung nimmt ein datawindow, eine andere ein datawindowchild.
| Methode | Rolle |
|---|---|
of_from_datastore (string as_path, datastore ads_source) → long | SCHREIBT die Zeilen des Primärpuffers als ARRAY von Objekten unter as_path: ein Objekt pro Zeile, ein Mitglied pro Spalte, benannt wie die Spalte. Der leere Pfad macht das DOKUMENT zu diesem Array (der Rumpf eines gebündelten Aufrufs). Liefert die Anzahl der geschriebenen Zeilen, -5, wenn der DataStore ungültig ist oder keine Spalte hat, sonst das, was of_set_raw liefert |
of_to_datastore (string as_path, datastore ads_target) → long | FÜGT das ARRAY von Objekten unter as_path in einen DataStore ein: eine Zeile pro Objekt, jedes Mitglied in die Spalte gleichen Namens (Groß-/Kleinschreibung egal), in den Typ der Spalte umgewandelt — eine Zahl aus einer Zahl oder aus einem String, der vollständig eine Zahl ist, ein Datum, ein Zeitstempel oder eine Uhrzeit aus einem ISO-Text, NULL für ein null oder einen Wert, den die Spalte nicht fassen kann. Ein Mitglied ohne passende Spalte wird ignoriert, ein Element, das kein Objekt ist, ergibt keine Zeile. Die Zeilen sind NEU: Update fügt sie ein. Liefert die Anzahl der eingefügten Zeilen, -5, wenn der DataStore ungültig ist oder keine Spalte hat, -4, wenn unter as_path kein Array liegt |
// Local variables
n_pbt_json lnv_json
datastore lds_orders
long ll_rows
string ls_body
// Send : every row of a retrieved DataStore as typed objects - the body of the call
lds_orders = create datastore
lds_orders.DataObject = "d_orders"
lds_orders.SetTransObject(SQLCA)
lds_orders.Retrieve()
ll_rows = lnv_json.of_from_datastore(/*path*/ "orders", /*source*/ lds_orders)
ls_body = lnv_json.of_text()
// Receive : the objects of a response inserted as NEW rows, ready for Update
lds_orders.Reset()
lnv_json.of_load(/*json*/ '{"data":[{"id":7,"customer":"Grace","amount":"19.99","due":"2026-12-24"}]}')
ll_rows = lnv_json.of_to_datastore(/*path*/ "data", /*target*/ lds_orders)
destroy lds_orders
Wenn der Text kein JSON ist #
| Methode | Rolle |
|---|---|
of_get_last_error ( ) → string | Warum der letzte Aufruf einen negativen Code lieferte; nach einem abgelehnten of_load, wo der Text falsch ist und warum: line 2, column 6 : ':' expected after a key. Leer nach einem erfolgreichen Aufruf |
of_error_position ( ) → long | Liefert die Position, ab 1 gezählt im Text des letzten of_load (ein BOM eingeschlossen), des Zeichens, an dem dieser Text falsch wird — zum Markieren in einem Editor; 0, wenn das letzte of_load gelungen ist |
// Local variables
n_pbt_json lnv_json
long ll_rc
string ls_why
long ll_where
// A response with a colon missing on its second line
ll_rc = lnv_json.of_load(/*json*/ '{"id":4152,~r~n "paid" true}')
IF ll_rc < 0 THEN
ls_why = lnv_json.of_get_last_error() // line 2, column 9 : ':' expected after a key
ll_where = lnv_json.of_error_position() // 22
END IF
Umfang. JSON parst in reinem PowerScript, ohne Seite oder Engine:
n_pbt_jsonbleibt 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.