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

Home

 
4D v20 R7
JSON Resolve pointers

JSON Resolve pointers 


 

JSON Resolve pointers ( Objekt {; Optionen} ) -> Funktionsergebnis 
Parameter Typ   Beschreibung
Objekt  Objekt in Objekt mit JSON Zeigern zum Auflösen
in Objekt mit aufgelösten JSON Zeigern (nur wenn Ergebnis ein Objekt ist)
Optionen  Objekt in Optionen für Zeigerauflösung
Funktionsergebnis  Objekt in 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:

  • einen Teil eines externen JSON Dokuments einzubinden oder einen Teil des JSON Dokuments an anderer Stelle desselben Dokuments wiederzuverwenden
  • eine zyklische Struktur in JSON auszudrücken
  • ein Vorlageobjekt mit in JSON gespeicherten Standardeigenschaften zu definieren

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:

EigenschaftWertetypBeschreibung
rootFolderStringAbsoluter 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.
mergeBooleanObjekte und Zeigerobjekte (true) zusammenlegen, anstatt diese zu ersetzen (false). Standard ist false

Nach Ausführen der Funktion gilt folgendes:

  • ist das Ergebnis der Zeigerauflösung ein Objekt, wird Objekt aktualisiert und enthält das Ergebnisobjekt.
  • ist das Ergebnis der Zeigerauflösung ein skalarer Wert (z.B. ein Text, eine Zahl ...), bleibt Objekt unverändert und der Ergebniswert wird in der Eigenschaft "value" des Funktionsergebnisses zurückgegeben.

In allen Fällen gibt die Funktion ein Objekt mit folgenden Eigenschaften zurück:

EigenschaftWertetypBeschreibung
valueBeliebigFunktionsergebnis nach Bearbeiten von Objekt. Ist das Ergebnis ein Objekt, ist es gleich mit dem Ausgabe Objekt.
successBooleanWahr, wenn alle Zeiger erfolgreich aufgelöst wurden
errorsCollectionFehler-Collection falls zutreffend
errors[].codeZahlFehlercode
errors[].messageStringFehlermeldung
errors[].pointerURIStringZeigerwert
errors[].referredPathStringVollstä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:

  • Ein relativer Pfad darf nicht mit '/' starten. Er wird relativ zum JSON Dokument aufgelöst, in dem der Pfad-String gefunden wurde.
  • Ein absoluter Pfad startet mit '/'. Nur Dateisystem-Pfadnamen werden als absolute Pfade akzeptiert. Zum Beispiel verweist "/RESOURCES/templates/myfile.json" auf die Datei "myfile.json", die sich im aktuellen Ordner für die Ressourcen der Datenbank befindet.

Hinweise:

  • Die Namensauflösung berücksichtigt Groß- und Kleinschreibung
  • 4D löst keinen Pfad auf eine Json Datei auf, der über das Netzwerk läuft (beginnt mit "http/https")

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
        }
    }
}



Siehe auch 

Download HDI database

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: JSON
Nummer: 1478

Dieser Befehl kann in preemptive Prozessen laufen

 
SEITENINHALT 
 
GESCHICHTE 

Erstellt: 4D v16 R5

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v20 R7)