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
Interpretiert 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 der ADD_ITEM-Aufruf unterschiedliche &ITEM#- und &CAST#-Werte zurückgegeben hat:
- auto
&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.
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
U00020408 {"OS":"Linux","disks":[{"GB":2000,"type":"HDD"},{"GB":512,"type":"SSD"}],"isAvailable":false,"inventoryNumber":null}
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