JSON_SET_VALUE
Verwenden Sie die Script-Funktion JSON_SET_VALUE, um den Wert eines vorhandenen Elements in einem JSON-Dokument festzulegen.
Syntax
JSON_SET_VALUE (JSON,JSONPath,Wert[,Cast])
Parameter
-
JSON
Ein String, der als JSON-Dokument interpretiert wird.
-
JSONPath
Der JSONPath, der das Element identifiziert, das aktualisiert werden muss
-
Wert
Der Wert, der dem JSON-Element zugewiesen werden soll
-
Cast (optional)
Dieser Parameter steuert die Konvertierung von Automic Script in JSON-Datentypen.
-
auto
Automatische Bestimmung des Datentyps. AUTO versucht, den angegebenen Wert in die folgenden Datentypen umzuwandeln (in dieser Reihenfolge). Der Wert wird in den ersten übereinstimmenden Datentyp konvertiert: JSON-String, Zahl oder String.
-
boolean
Wandelt die folgenden Werte in true oder false in JSON um:
- true: 1,'Y'
- false: 0,'N'
-
number
Erzwingt die Konvertierung in eine JSON-Zahl, auch wenn der Automic Script-Datentyp keine Zahl ist
-
String
Erzwingt die Konvertierung in einen String (NEW_VALUE kann ein anderer Datentyp sein)
-
JSON
Interpretieren Sie den String als gültiges JSON-Dokument für die Konvertierung von JSON-Strings in Anführungszeichen in JSON-Unterdokumente.
Der folgende Abschnitt erläutert das Casting unter Verwendung praktischer Beispiele. Betrachten Sie das folgende Script:
:SET &JSON_DOC# = '{"val":""}'
:SET &RET# = JSON_SET_VALUE(&JSON_DOC#, '$.val',&VALUE#,&CAST#)
Die folgende Tabelle fasst die Änderungen in &JSON_DOC# zusammen, nachdem mit dem Aufruf von ADD_ITEM andere Werte für &ITEM# und &CAST# vorliegen:
-
&VALUE# | &CAST # | &JSON_DOC# nach ADD_ITEM |
---|---|---|
'[1,2,3]' | AUTO | {"val":[1,2,3]} |
'[1,2,3]' | STRING | {"val":"[1,2,3]"} |
'1' | AUTO | {"val":1} |
'1' | STRING | {"val":"1"} |
'1' | NUMBER | {"val":1} |
'1' | BOOLEAN | {"val":true} |
'twelve' | AUTO | {"val":"twelve"} |
'twelve' | NUMBER |
{"val": ""} (Hinweis: Ungültiges Casting - JSON-Dokument wird nicht geändert, und es wird ein Casting-Fehler zurückgegeben) |
Rückgabewert
Keiner/Fehlercode im Fehlerfall
Laufzeitfehler
JSON_SET_VALUE schlägt mit einem Laufzeitfehler unter den folgenden Bedingungen fehl:
-
45334
Wenn Ihr JSON-Dokument ungültig ist
-
45342
Syntaxfehler im JSONPath-Ausdruck
-
45336
Kein Wert angegeben
-
45337
Ungültiger Cast-Parameter: AUTO, STRING, NUMBER, BOOLEAN oder JSON erwartet
-
45338
Wert kann nicht in ausgewählten Datentyp umgewandelt werden
-
45340
JSONPath stimmt nicht mit einem Element überein
Einschränkungen
JSON_SET_VALUE erlaubt Ihnen nicht, neue Elemente zu Objekten oder Arrays hinzuzufügen. Verwenden Sie für diesen Zweck JSON_ADD_ITEM.
PATH_TO_ELEMENT kann nur ein JSON-Element setzen. Der Pfad muss im Dokument vorhanden sein.
JSON-Dokumente, die größer als 1 MB sind, werden nicht unterstützt.
style="font-weight: bold Wichtig!
Testen Sie JSONPath-Ausdrücke immer in einem Automation Engine-Script, bevor Sie sie in die Produktion übernehmen. JSONPath-Ausdrücke, die in anderen Tools entwickelt wurden, funktionieren möglicherweise nicht, da es keinen gemeinsamen JSONPath-Standard gibt.
Beispiele:
In diesem Beispiel wird die Script-Funktion zum Erweitern eines JSON-Objekts mit neuen Werten verwendet:
:SET&JSON_DOC# = '{"OS": "Linux","disks": null, "isAvailable": false, "inventoryNumber":123}'
:SET&IS_AVAIL# = 1
:SET&RET#=JSON_SET_VALUE(&JSON_DOC#,'$.disks','[{"GB":2000, "type":"HDD"},{"GB":512, "type":"SSD"}]','JSON')
:SET&RET#=JSON_SET_VALUE(&JSON_DOC#,'$.disks',&IS_AVAIL#,'BOOLEAN')
:SET&RET#=JSON_SET_VALUE(&JSON_DOC#,'$.inventoryNumber','null')
:P&JSON_DOC#
Ergebnis des Aktivierungsreports
Tipp:
Manchmal ist es erforderlich, dass Sie Teile ihrer JSON-Dokumente auskommentieren (Escape), weil sie von einer separaten Entität verarbeitet werden. Sie können ein Escape für solche Teile festlegen, indem Sie den Cast-Typ string für das zitierte JSON-Unterdokument verwenden:
:SET &DOC# = '{"deploymentName": "hugeServer", "ansibleConf":""}'
:SET "ED_SUBDOC# = '{"awsZone":"srvaws02"}'
:SET &RESULT# = JSON_SET_VALUE(&DOC#, '$.ansibleConf', "ED_SUBDOC#, 'STRING')
:P &DOC#
!outputs {"deploymentName":"hugeServer","ansibleConf":"{\"awsZone\":\"srvaws02\"}"}
Siehe auch:
seealso