PARSE JSON
operand1
[ENCODED[IN] CODEPAGE
operand2]
|
||||||||||
|
|
INTO |
|
PATH operand3 |
[WITH SEPARATOR operand4]
|
[NAME operand5]
|
[VALUE operand6]
|
|
|
||
NAME operand5 |
[VALUE operand6]
|
|||||||||
VALUE
operand6 |
||||||||||
[ GIVING operand7 [SUBCODE operand8]]
|
||||||||||
| statement... | ||||||||||
END-PARSE
[(r)]
|
(structured mode only) | |||||||||
LOOP
[(r)] |
(reporting mode only) | |||||||||
Dieses Dokument behandelt folgende Themen:
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Verwandtes Statement: REQUEST
DOCUMENT.
Gehört zur Funktionsgruppe: Internet und Parsing.
Das Statement PARSE JSON ermöglicht es Ihnen,
XML-Dokumente aus einem Natural-Programm zu parsen. Siehe auch
Statements für den Internet- und
JSON-XML-Zugriff im Leitfaden zur
Programmierung.
Es empfiehlt sich, dynamische Variablen zu benutzen, wenn Sie das
Statement PARSE JSON verwenden. Der Grund dafür ist, dass es
unmöglich ist, die Länge einer statischen Variablen zu ermitteln. Der Einsatz
von statischen Variablen könnte zum Abschneiden des Wertes führen, der in die
Variable geschrieben werden soll.
Informationen zur Unicode-Unterstützung siehe
PARSE
JSON in der Unicode- und
Codepage-Unterstützung-Dokumentation.
Die folgenden Markierungen werden in Pfadzeichenketten verwendet, um die verschiedenen Datenstrukturen und ihre Zustände in einem JSON-Dokument darzustellen:
| Markierung | JSON-Daten | Position in der Pfad-Zeichenkette |
|---|---|---|
< |
Anfang eines Objekts | Am Anfang, am Ende oder zwischen Feldnamen |
> |
Ende eines Objekts | Am Ende |
( |
Anfang eines Arrays | Am Anfang, am Ende oder zwischen Feldnamen. |
) |
Ende eines Arrays | Am Ende |
/ |
Separator
Anmerkung |
|
$ |
Geparste Daten - Datenzeichenkette | Am Ende |
Durch die Verwendung dieses zusätzlichen Markups im Pfadstring können Sie die Elemente des JSON-Dokuments in der Ausgabe leichter unterscheiden.
Die folgenden Natural-Systemvariablen werden für jedes ausgeführte
PARSE JSON-Statement automatisch erstellt:
Durch Angabe der Notation
(r)
hinter *PARSE-TYPE,
*PARSE-LEVEL und
*PARSE-INDEX können Sie das Statement-Label bzw.
die Statement-Nummer des Statements angeben, in dem das
PARSE-Statement abgesetzt wurde. Wenn
(r) nicht angegeben wird, stellt die
betreffende Systemvariable die Systemvariable der JSON-Daten dar, die gerade in
der zurzeit aktiven PARSE-Verarbeitungsschleife abgearbeitet
werden.
Weitere Informationen über diese Systemvariablen finden Sie in der Systemvariablen-Dokumentation.
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | U | B | ja | nein | |||||||||||||
operand2
|
C | S | A | ja | nein | |||||||||||||||
operand3
|
S | A | U | B | ja | ja | ||||||||||||||
operand4
|
C | S | A | U | B | ja | nein | |||||||||||||
operand5
|
S | A | U | B | ja | ja | ||||||||||||||
operand6
|
S | A | U | B | ja | ja | ||||||||||||||
operand7
|
S | I4 | ja | ja | ||||||||||||||||
operand8
|
S | I4 | ja | ja | ||||||||||||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
operand1
|
JSON-Dokument:
|
ENCODED [IN] CODEPAGE
operand2
|
ENCODED [IN] CODEPAGE:
|
PATH
operand3
|
Pfad:
Der Pfad ( Anmerkung Siehe auch Beispiel 1 - Benutzung der PATH-Option. |
SEPARATOR
operand4
|
Separator:
Siehe auch Beispiel 2 - Benutzung der PATH-Option mit SEPARATOR. |
NAME
operand5 |
Datenelementname:
Wenn Siehe auch Beispiel 3 - Benutzung der NAME-Option. |
VALUE
operand6 |
Datenelementinhalt:
Wenn kein Wert vorhanden ist, dann wird die damit
verbundene dynamische Variable auf Siehe auch Beispiel 4 - Benutzung der VALUE-Option. |
GIVING
operand7 |
GIVING-Parameter:
Wenn der
Wenn der Parameter Wenn ein Fehler auftritt und der
Wenn Siehe auch Beispiel 5 - Benutzung der GIVING- und SUBCODE-Klauseln. |
SUBCODE
operand8 |
SUBCODE-Parameter:
Wenn der Wenn der
Anmerkung Siehe auch Beispiel 5 - Benutzung der GIVING- und SUBCODE-Klauseln. |
END-PARSE
(r)
|
Ende des PARSE
JSON-Statements:
Im Structured Mode muss das für Natural reservierte
Schlüsselwort Im Structured Mode können Sie bei Im Reporting Mode wird das Natural-Statement
Im Reporting Mode können Sie bei |
LOOP
(r)
|
Der folgende Code
** Example 'PAJSNEX1': PARSE JSON (with PATH and CODEPAGE)
**
** Note: Definition of variable MYJSON needs TQMARK set to OFF.
************************************************************************
OPTIONS TQMARK=OFF /* Translate quotation mark
*
DEFINE DATA LOCAL
1 MYJSON (A) DYNAMIC
1 MYCODEPAGE (A) DYNAMIC
1 MYPATH (A) DYNAMIC
END-DEFINE
*
COMPRESS '{'
' "employee": {'
' "@personnel-id": "30016315",'
' "full-name": {'
' "first-name": "RICHARD",'
' "name": "FORDHAM"'
' }'
' }'
'}'
INTO MYJSON LEAVING NO
*
MYCODEPAGE := *CODEPAGE
*
PARSE JSON MYJSON ENCODED IN CODEPAGE MYCODEPAGE
INTO PATH MYPATH
PRINT MYPATH
END-PARSE
END
erzeugt die folgende Ausgabe:
< </employee </employee/< </employee/</@personnel-id </employee/</@personnel-id/$ </employee/</full-name </employee/</full-name/< </employee/</full-name/</first-name </employee/</full-name/</first-name/$ </employee/</full-name/</name </employee/</full-name/</name/$ </employee/</full-name/> </employee/> >
Der folgende Code
** Example 'PAJSNEX2': PARSE JSON (with PATH and SEPARATOR)
**
** Note: Definition of variable MYJSON needs TQMARK set to OFF.
************************************************************************
OPTIONS TQMARK=OFF /* Translate quotation mark
*
DEFINE DATA LOCAL
1 MYJSON (A) DYNAMIC
1 MYCODEPAGE (A) DYNAMIC
1 MYPATH (A) DYNAMIC
1 MYSEPARATOR (A1)
END-DEFINE
*
COMPRESS '{'
' "employee": {'
' "@personnel-id": "30016315",'
' "full-name": {'
' "first-name": "RICHARD",'
' "name": "FORDHAM"'
' }'
' }'
'}'
INTO MYJSON LEAVING NO
*
MYCODEPAGE := *CODEPAGE
MYSEPARATOR := '*'
*
PARSE JSON MYJSON ENCODED IN CODEPAGE MYCODEPAGE
INTO PATH MYPATH WITH SEPARATOR MYSEPARATOR
PRINT MYPATH
END-PARSE
END
erzeugt die folgende Ausgabe:
< <*employee <*employee*< <*employee*<*@personnel-id <*employee*<*@personnel-id*$ <*employee*<*full-name <*employee*<*full-name*< <*employee*<*full-name*<*first-name <*employee*<*full-name*<*first-name*$ <*employee*<*full-name*<*name <*employee*<*full-name*<*name*$ <*employee*<*full-name*> <*employee*> >
Der folgende Code
** Example 'PAJSNEX3': PARSE JSON (with PATH and NAME)
**
** Note: Definition of variable MYJSON needs TQMARK set to OFF.
************************************************************************
OPTIONS TQMARK=OFF /* Translate quotation mark
*
DEFINE DATA LOCAL
1 MYJSON (A) DYNAMIC
1 MYPATH (A) DYNAMIC
1 MYNAME (A) DYNAMIC
END-DEFINE
*
COMPRESS '{'
' "employee": {'
' "@personnel-id": "30016315",'
' "full-name": {'
' "first-name": "RICHARD",'
' "name": "FORDHAM"'
' }'
' }'
'}'
INTO MYJSON LEAVING NO
*
PARSE JSON MYJSON INTO PATH MYPATH NAME MYNAME
DISPLAY (AL=39) MYPATH MYNAME
END-PARSE
END
erzeugt die folgende Ausgabe:
MYPATH MYNAME ---------------------------------- ----------------------------------- < </employee employee </employee/< employee </employee/</@personnel-id @personnel-id </employee/</@personnel-id/$ </employee/</full-name full-name </employee/</full-name/< full-name </employee/</full-name/</first-name first-name </employee/</full-name/</first-name/$ </employee/</full-name/</name name </employee/</full-name/</name/$ </employee/</full-name/> </employee/> >
Der folgende Code
** Example 'PAJSNEX4': PARSE JSON (with PATH and VALUE)
**
** Note: Definition of variable MYJSON needs TQMARK set to OFF.
************************************************************************
OPTIONS TQMARK=OFF /* Translate quotation mark
*
DEFINE DATA LOCAL
1 MYJSON (A) DYNAMIC
1 MYPATH (A) DYNAMIC
1 MYVALUE (A) DYNAMIC
END-DEFINE
*
COMPRESS '{'
' "employee": {'
' "@personnel-id": "30016315",'
' "full-name": {'
' "first-name": "RICHARD",'
' "name": "FORDHAM"'
' }'
' }'
'}'
INTO MYJSON LEAVING NO
*
PARSE JSON MYJSON INTO PATH MYPATH VALUE MYVALUE
DISPLAY (AL=39) MYPATH MYVALUE
END-PARSE
END
erzeugt die folgende Ausgabe:
MYPATH MYVALUE
--------------------------------------- ---------------------------------------
<
</employee
</employee/<
</employee/</@personnel-id
</employee/</@personnel-id/$ 30016315
</employee/</full-name
</employee/</full-name/<
</employee/</full-name/</first-name
</employee/</full-name/</first-name/$ RICHARD
</employee/</full-name/</name
</employee/</full-name/</name/$ FORDHAM
</employee/</full-name/>
</employee/>
>
Das folgende Programm erzeugt einen Laufzeitfehler:
** Example 'PAJSNEX5': PARSE JSON (with GIVING and SUBCODE)
**
** Note: Definition of variable MYJSON needs TQMARK set to OFF.
************************************************************************
OPTIONS TQMARK=OFF /* Translate quotation mark
*
DEFINE DATA LOCAL
1 MYJSON (A) DYNAMIC
1 MYPATH (A) DYNAMIC
1 MYNAME (A) DYNAMIC
1 MYVALUE (A) DYNAMIC
1 MYGIVING (I4)
1 MYSUBCODE (I4)
END-DEFINE
*
* Produce Natural runtime error with incorrect JSON document
*
COMPRESS '{'
' "employee": {'
' "@personnel-id": "30016315",'
' "full-name": {'
' "first-name": "RICHARD",'
' "FORDHAM"' /* here the key 'name' is missing
' }'
' }'
'}'
INTO MYJSON LEAVING NO
*
PARSE JSON MYJSON INTO PATH MYPATH NAME MYNAME VALUE MYVALUE
GIVING MYGIVING SUBCODE MYSUBCODE
WRITE (AL=39) MYPATH
END-PARSE
*
IF MYGIVING NE 0
WRITE / 'Error Number:' MYGIVING 'Subcode:' MYSUBCODE
END-IF
END
Ausgabe des obigen Programms:
<
</employee
</employee/<
</employee/</@personnel-id
</employee/</@personnel-id/$
</employee/</full-name
</employee/</full-name/<
</employee/</full-name/</first-name
</employee/</full-name/</first-name/$
</employee/</full-name/</FORDHAM
Error Number: 8331 Subcode: 5