json.path.put: Difference between revisions

From RPTools Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 3: Line 3:
|version=1.5.5
|version=1.5.5
|description=
|description=
Add or update the key with the given value at the given path of a nested [[JSON Object]]. Additional information on how to specify the path is available [https://github.com/json-path/JsonPath here].
Create or update the key with the given value at the given path of a nested [[JSON Object]]. {{func|json.path.put}} is only used creating/updating name/value pairs in [[JSON Object]]s.  See {{func|json.path.set}} for creating/updated values in arrays.  Additional information on how to specify the path is available [https://github.com/json-path/JsonPath/blob/master/README.md here].


|usage=
|usage=
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
json.path.put(json, path, key, value)
json.path.put(json, path, key, value)
</source>
</syntaxhighlight>


'''Parameters'''
'''Parameters'''
Line 19: Line 19:
|examples=
|examples=
Suppose we have the following nested json:
Suppose we have the following nested json:
<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
[h:troll = json.set("{}", "name", "Troll", "HP", 75, "Attacks", json.append("Claw", "Bite"))]
[h:troll = json.set("{}", "name", "Troll", "HP", 75, "Attacks", json.append("Claw", "Bite"))]
[h:orc = json.set("{}", "name", "Orc", "HP", 13, "Attacks", json.append("Sword", "Punch"))]
[h:orc = json.set("{}", "name", "Orc", "HP", 13, "Attacks", json.append("Sword", "Punch"))]
[h:monsters = json.set("{}", "Troll", troll, "Orc", orc)]
[h:monsters = json.set("{}", "Troll", troll, "Orc", orc)]
</source>
</syntaxhighlight>
 
Which looks like this:
<syntaxhighlight lang="javascript">
{
  "Troll":  {
    "name": "Troll",
    "HP": 75,
    "Attacks":    [
      "Claw",
      "Bite"
    ]
  },
  "Orc":  {
    "name": "Orc",
    "HP": 13,
    "Attacks":    [
      "Sword",
      "Punch"
    ]
  }
}
</syntaxhighlight>
To add a new "AC" value to the troll, we could write
To add a new "AC" value to the troll, we could write


<source lang="mtmacro" line>
<syntaxhighlight lang="mtmacro" line>
[monsters = json.path.put(monsters, "Troll", "AC", "12")]
[h: monsters = json.path.put(monsters, "Troll", "AC", 12)]
</source>
<pre>[r: json.indent(json.get(monsters,"Troll"),2)]</pre>
 
</syntaxhighlight>
And see this:
<syntaxhighlight lang="javascript">
{
  "name": "Troll",
  "HP": 75,
  "Attacks":    [
    "Claw",
    "Bite"
  ]
  "AC": 12
}
</syntaxhighlight>
}}
}}


[[Category:JSON Function]]
[[Category:JSON Function]]
[[Category:JSON Path Function]]
[[Category:JSON Path Function]]

Latest revision as of 16:42, 15 March 2023

json.path.put() Function

Introduced in version 1.5.5
Create or update the key with the given value at the given path of a nested JSON Object. json.path.put() is only used creating/updating name/value pairs in JSON Objects. See json.path.set() for creating/updated values in arrays. Additional information on how to specify the path is available here.

Usage

json.path.put(json, path, key, value)

Parameters

  • json - The json element in which the JSON Object is nested.
  • path - The path to the JSON Object.
  • key - The key of the JSON Object.
  • value - The value to associated with the key.

Examples

Suppose we have the following nested json:
[h:troll = json.set("{}", "name", "Troll", "HP", 75, "Attacks", json.append("Claw", "Bite"))]
[h:orc = json.set("{}", "name", "Orc", "HP", 13, "Attacks", json.append("Sword", "Punch"))]
[h:monsters = json.set("{}", "Troll", troll, "Orc", orc)]

Which looks like this:

{
  "Troll":   {
    "name": "Troll",
    "HP": 75,
    "Attacks":     [
      "Claw",
      "Bite"
    ]
  },
  "Orc":   {
    "name": "Orc",
    "HP": 13,
    "Attacks":     [
      "Sword",
      "Punch"
    ]
  }
}

To add a new "AC" value to the troll, we could write

[h: monsters = json.path.put(monsters, "Troll", "AC", 12)]
<pre>[r: json.indent(json.get(monsters,"Troll"),2)]</pre>

And see this:

{
  "name": "Troll",
  "HP": 75,
  "Attacks":     [
    "Claw",
    "Bite"
  ]
  "AC": 12
}