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:
&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 &QUOTED_SUBDOC# = '{"awsZone":"srvaws02"}'
:SET &RESULT# = JSON_SET_VALUE(&DOC#, '$.ansibleConf', &QUOTED_SUBDOC#, 'STRING')
:P &DOC#
!outputs {"deploymentName":"hugeServer","ansibleConf":"{\"awsZone\":\"srvaws02\"}"}

Siehe auch: