Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
JSON Resolve pointers
|
JSON Resolve pointers ( Objekt {; Optionen} ) -> Funktionsergebnis | ||||||||
Parameter | Typ | Beschreibung | ||||||
Objekt | Objekt |
![]() |
Objekt mit JSON Zeigern zum Auflösen | |||||
![]() |
Objekt mit aufgelösten JSON Zeigern (nur wenn Ergebnis ein Objekt ist) | |||||||
Optionen | Objekt |
![]() |
Optionen für Zeigerauflösung | |||||
Funktionsergebnis | Objekt |
![]() |
Objekt mit Ergebnis der Bearbeitung | |||||
Die Funktion JSON Resolve pointers löst alle in Objekt gefundenen JSON Zeiger auf, optional mit den Einstellungen in Optionen.
JSON Zeiger sind besonders nützlich, um:
Im Parameter Objekt übergeben Sie ein Objekt mit aufzulösenden JSON Zeigern. Weitere Informationen dazu finden Sie im unteren Abschnitt JSON Zeiger definieren.
Hinweis: Nach Ausführen der Funktion wird das ursprüngliche Objekt mit den aufgelösten Zeigern aktualisiert (außer, das Ergebnis ist kein Objekt, s.o.). Wollen Sie die Originalversion von Objekt beibehalten, müssen Sie zuvor den Befehl OB Copy verwenden.
Optional können Sie in Optionen ein Objekt mit spezifischen Eigenschaften übergeben, die beim Auflösen der Zeiger verwendet werden sollen. Es gibt folgende Eigenschaften:
Eigenschaft | Wertetyp | Beschreibung |
rootFolder | String | Absoluter Pfad (mit standardmäßiger 4D Syntax) zum Ordner, der für Auflösen relativer Zeiger in Objekt dient. Standardmäßig ist es der Ordner Resources der Anwendung. |
merge | Boolean | Objekte und Zeigerobjekte (true) zusammenlegen, anstatt diese zu ersetzen (false). Standard ist false ![]() |
Nach Ausführen der Funktion gilt folgendes:
In allen Fällen gibt die Funktion ein Objekt mit folgenden Eigenschaften zurück:
Eigenschaft | Wertetyp | Beschreibung |
value | Beliebig | Funktionsergebnis nach Bearbeiten von Objekt. Ist das Ergebnis ein Objekt, ist es gleich mit dem Ausgabe Objekt. |
success | Boolean | Wahr, wenn alle Zeiger erfolgreich aufgelöst wurden |
errors | Collection | Fehler-Collection falls zutreffend |
errors[].code | Zahl | Fehlercode |
errors[].message | String | Fehlermeldung |
errors[].pointerURI | String | Zeigerwert |
errors[].referredPath | String | Vollständiger Pfad des Dokuments |
JSON Zeiger ist ein Standard in Form eines String, um auf einen bestimmten Feld- oder Schlüsselwert im gesamten JSON Dokument zuzugreifen. Weitere Informationen zum Standard finden Sie unter RFC 6901.
Genaugenommen ist ein JSON Zeiger ein String aus mehreren Teilen, getrennt durch '/'. Ein JSON Zeiger liegt gewöhnlich in einer URL zum Dokument, in dem der Zeiger aufgelöst wird. Das Zeichen "#' innerhalb der URI dient zur Kennzeichnung des JSON Zeigers. Gemäß Konvention kann eine URI mit einem JSON Zeiger in einer JSON Objekteigenschaft liegen, die den Namen "$ref" haben muss.
{ "$ref":<path>#<json_pointer> }
Hinweis: 4D unterstützt nicht das Zeichen "-" als Referenz auf nicht-existierende Array-Elemente.
JSON Zeiger werden rekursiv aufgelöst, d.h. enthält ein aufgelöster Zeiger ebenfalls Zeiger, werden diese wiederum rekursiv aufgelöst, bis alle Zeiger aufgelöst sind. In diesem Kontext können alle JSON Zeiger URIs in Dateipfaden relativ oder absolut sein. Sie müssen das Zeichen '/' als Pfadtrenner nutzen und werden folgendermaßen aufgelöst:
Hinweise:
Dieses grundlegende Beispiel veranschaulicht, wie sich ein JSON Zeiger setzen und in einem Objekt ersetzen lässt:
// Objekt mit Wert erstellen
C_OBJECT($o)
$o:=New object("value";42)
// das Objekt JSON Zeiger erstellen
C_OBJECT($ref)
$ref:=New object("$ref";"#/value")
// das Objekt JSON Zeiger als Eigenschaft erstellen
$o.myJSONPointer:=$ref
// Das Ganze auflösen und prüfen, ob der Zeiger aufgelöst wurde
C_OBJECT($result)
$options:=New object("rootFolder";Get 4D folder(Current resources folder);"merge";True)
$result:=JSON Resolve pointers($o;$options)
If($result.success)
ALERT(JSON Stringify($result.value))
//{"value":42,"myJSONPointer":42}
Else
ALERT(JSON Stringify($result.errors))
End if
Im JSON Objekt mit Namen $oMyConfig die Rechnungsadresse auch als Lieferadresse wiederverwenden:
{ "lastname": "Doe", "firstname": "John", "billingAddress": { "street": "95 S. Market Street", "city": "San Jose", "state": "California" }, "shippingAddress": { "$ref": "#/billingAddress" } }
Nach Ausführen dieses Code:
$oResult:=JSON Resolve pointers($oMyConfig)
... wird folgendes Objekt zurückgegeben:
{ "success": true, "value": { "lastname": "Doe", "firstname": "John", "billingAddress": { "street": "95 S. Market Street", "city": "San Jose", "state": "California" }, "shippingAddress": { "street": "95 S. Market Street", "city": "San Jose", "state": "California" } } }
Dieses Beispiel zeigt die Auswirkung der Option "merge". Sie wollen die Rechte eines Benutzers anhand einer Standarddatei bearbeiten.
{ "rights": { "$ref": "defaultSettings.json#/defaultRights", "delete": true, "id": 456 } }
Die Datei defaultSettings.json enthält:
{ "defaultRights": { "edit": true, "add": false, "delete": false } }
Führen Sie folgendes aus:
C_OBJECT($options)
$options:=New object("merge";False) //Inhalt ersetzen
$oResult:=JSON Resolve pointers($oMyConfig;$options)
... ist der Ergebniswert exakt der Inhalt der Datei defaultSettings.json:
{ "success": true, "value": { "rights": { "edit": true, "add": false, "delete": false } } }
Führen Sie folgendes aus:
C_OBJECT($options)
$options:=New object("merge";True) //beide Inhalte zusammenlegen
$oResult:=JSON Resolve pointers($oMyConfig;$options)
... ist der Ergebniswert eine zusammengeführte Version des Originalobjekts mit der Vorlage:
{ "success": true, "value": { "rights": { "edit": true, "add": false, "delete": true, "id": 456 } } }
Produkt: 4D
Thema: JSON
Nummer:
1478
Erstellt: 4D v16 R5
4D Programmiersprache ( 4D v20 R7)