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) | |||||||||
Dieser Abschnitt 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