Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com

Home

 
4D v20 R7
JSON Parse

JSON Parse 


 

JSON Parse ( jsonString {; Typ}{; *} ) -> Funktionsergebnis 
Parameter Typ   Beschreibung
jsonString  String in Zu analysierender JSON String
Typ  Lange Ganzzahl in Typ, in den die Werte konvertiert werden sollen
Operator in Fügt Zeilenposition und Versatz jeder Eigenschaft hinzu, wenn zurückgegebener Wert ein Objekt ist.
Funktionsergebnis  Objekt, Mixed in Aus JSON String extrahierte Werte

Die Funktion JSON Parse analysiert den Inhalt einer in JSON formatierten Zeichenkette und extrahiert Werte, die Sie in einem 4D Feld oder einer Variablen speichern können. Diese Funktion deserialisiert Daten im JSON-Format; sie führt die entgegengesetzte Aktion der Funktion JSON Stringify durch.

In jsonString übergeben Sie die in JSON formatierte Zeichenkette, deren Inhalt Sie analysieren wollen. Sie muss korrekt formatiert sein, sonst wird ein Analyse-Fehler erzeugt. JSON Parse lässt sich von daher zum Bestätigen von JSON Strings verwenden. 

Hinweis: Beim Verwenden von Zeigern müssen Sie zuerst JSON Stringify und dann JSON Parse aufrufen.

Standardmäßig, d.h. ohne den Parameter Typ, versucht 4D, den erhaltenen Wert in den Variablen- oder Feldtypen zu konvertieren, der zum Speichern der Ergebnisse verwendet wird - sofern einer definiert wurde. Andernfalls versucht 4D, den Typ einzuschätzen. Über den Parameter Typ können Sie die Interpretation des Typs erzwingen. Übergeben Sie eine der folgenden Konstanten unter dem Thema Feld und Variablentypen:

Konstante Typ Wert
Is Boolean Lange Ganzzahl 6
Is collection Lange Ganzzahl 42
Is date Lange Ganzzahl 4
Is longint Lange Ganzzahl 9
Is object Lange Ganzzahl 38
Is real Lange Ganzzahl 1
Is text Lange Ganzzahl 2
Is time Lange Ganzzahl 11

Hinweise:

  • Werte vom Typ Zahl müssen im Bereich ±10.421e±10 liegen
  • In Werten vom Typ Text müssen alle Sonderzeichen in Escape-Sequenzen stehen, inkl. Anführungszeichen (siehe Beispiele)
  • Standardmäßig (mit der Konstante Is date) geht die Funktion davon aus, dass das 4D Datum eine lokale Zeit enthält und nicht GMT. Sie können diese Einstellung über den Selektor Dates inside objects des Befehls SET DATABASE PARAMETER ändern.
  • Ab 4D v16 R6 ist die aktuelle Einstellung zum Speichern des Datums vom Typ Datum, JSON Parse gibt JSON Strings im Format "YYYY-MM-DD" automatisch als Datumswerte zurück. Weitere Informationen dazu finden Sie auf der Seite Kompatibilität, Option "Verwende Datumstyp statt ISO Datumsformat in Objekten".
  • Werte vom Typ Zeit lassen sich aus Zahlen in Strings zurückgeben. Standardmäßig wird der analysierte Wert als Anzahl von Sekunden gewertet.

Übergeben Sie den optionalen Parameter * und ist der Parameter jsonString ein Objekt, enthält das zurückgegebene Objekt die zusätzliche Eigenschaft  __symbols, die für jede Eigenschaft und Untereigenschaft des Objekts Pfad, Zeilenposition und Zeilenversatz anzeigt. Diese Information kann beim Debuggen nützlich sein. Die Eigenschaft __symbols hat folgende Struktur:

__symbols:{//Objektbeschreibung
   myAtt.mySubAtt...:{ //Pfad der Eigenschaft
      line:10, //Zeilennummer der Eigenschaft 
      offset:35 //Versatz der Eigenschaft ab Zeilenbeginn
      }
   }

Hinweis: Der Parameter * wird ignoriert, wenn der zurückgegebene Wert nicht Objekt als Typ hat.

Beispiele für eine einfache Konvertierung:

 C_REAL($r)
 $r:=JSON Parse("42.17") //$r = 42,17 (Zahl)
 
 C_LONGINT($el)
 $el:=JSON Parse("120.13";Is longint//$el=120
 
 C_TEXT($t)
 $t:=JSON Parse("\"Jahr 42\"";Is text// $t="Jahr 42" (Text)
 
 C_OBJECT($o)
 $o:=JSON Parse("{\"name\":\"jean\"}")
  // $o = {"name":"jean"} (4D Objekt)
 
 C_BOOLEAN($b)
 $b:=JSON Parse("{\"manager\":true}";Is Boolean// $b=true
 
 C_TIME($h)
 $h:=JSON Parse("5120";Is time//$h=01:25:20

Beispiel zum Konvertieren eines Datums:

 $test:=JSON Parse("\"1990-12-25T12:00:00Z\"")
  // $test=1990-12-25T12:00:00Z
 C_DATE($date;$date2;$date3)
 $date:=JSON Parse("\"2008-01-01T12:00:00Z\"";Is date)
  //$date=01/01/08
 $date2:=JSON Parse("\"2017-07-13T23:00:00.000Z\"";Is date)
  //$date2=14/07/17 (Paris Zeitzone)
 SET DATABASE PARAMETER(Dates inside objects;String type without time zone)
 $date3:=JSON Parse("\"2017-07-13T23:00:00.000Z\"";Is date)
  //$date3=13/07/17

Ist die aktuelle Datumseinstellung zum Speichern vom Typ Datum, schreiben Sie folgenden Code:

 C_OBJECT($o)
 C_TEXT($json)
 C_DATE($birthday)
 
 $json:="{\"name\":\"Marcus\",\"birthday\":\"2017-10-16\"}"
 $o:=JSON Parse($json)
 $birthday:=$o.birthday
  //$birthday=16/10/17

Hinweis: Weitere Informationen dazu finden Sie auf der Seite Kompatibilität, Option "Verwende Datumstyp statt ISO Datumsformat in Objekten".

Dieses Beispiel zeigt die kombinierte Verwendung der Befehle JSON Stringify und JSON Parse:

 C_TEXT($JSONContact)
 C_OBJECT($Contact;$Contact2)
 $Contact:=New object("name";"Monroe";"firstname";"Alan")
 
  // JSON Stringify: Ein Objekt in einen JSON String konvertieren
 $JSONContact:=JSON Stringify($Contact)
 
  // JSON Parse: Ein JSON String in ein neues Objekt konvertieren
 $Contact2:=JSON Parse($JSONContact)

Eine 4D Collection aus einem JSON Array erstellen:

 C_COLLECTION($myCol)
 $myCol:=JSON Parse("[\"Monday\",10,\"Tuesday\",11,\"Wednesday\",12,false]")

Nachfolgenden String durchlaufen und Zeilenposition und Versatz jeder Eigenschaft erhalten:

{
    "alpha": 4552,
    "beta": [
        {
            "echo": 45,
            "delta": "text1" 
        },
        {
            "echo": 52,
            "golf": "text2" 
        }
    ]
}

Sie können schreiben:

 C_OBJECT($obInfo)
 $obInfo=JSON Parse("json_string";Is object;*) //* um im zurückgegebenen Objekt $obInfo
  //die Eigenschaft __symbols zu erhalten

Das Objekt $obInfo enthält:

{alpha:4552,
beta:[{echo:45,delta:text1},{echo:52,golf:text2}],
__symbols:{alpha:{line:2,offset:4},
beta:{line:3,offset:4},
beta[0].echo:{line:5,offset:12},
beta[0].delta:{line:6,offset:12},
beta[1].echo:{line:9,offset:12},
beta[1].golf:{line:10,offset:12}}}



Siehe auch 

Feld und Variablentypen
JSON PARSE ARRAY
JSON Stringify
JSON Validate

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: JSON
Nummer: 1218

Dieser Befehl kann in preemptive Prozessen laufen

 
SEITENINHALT 
 
GESCHICHTE 

Erstellt: 4D v14
Geändert: 4D v16 R4
Geändert: 4D v16 R6

 
SCHLÜSSELWÖRTER 

JSON validator

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v20 R7)