# JsonSet 脚本和图表功能

JsonSet() 修改包含 JSON（JavaScript 对象表示法）数据的字符串。它可以使用路径指定的新位置设置或插入 JSON 值。数据必须是有效的 JSON，但可以包含额外的空格或换行符。

信息注释您可以使用 JsonSet 添加任意数量的名称-值对。

语法：

value JsonSet(json, path, value)

返回数据类型： 双

参数

| 参数 | 描述 |
| --- | --- |
| json | 包含 JSON 数据的字符串。 |
| path | 必须根据 [RFC 6901](https://datatracker.ietf.org/doc/html/rfc6901) 指定路径。这允许在 JSON 数据中构建属性，而无需使用复杂的子字符串或索引函数以及串联。 |
| value | JSON 格式的新字符串值。 |

示例：有效和无效的图表表达式

| 示例 | 结果 |
| --- | --- |
| `JsonSet( '{}','/a','"b"' )` | 返回 `{"a":"b"}` |
| `JsonSet( '[]','/0','"x"' )` | 返回 `["x"]` |
| `JsonSet( '"abc"','','123' )` | 返回 `123` |
| `JsonSet( '"abc"','/x','123' )` | 返回 `null`。路径未指向 JSON 数据的有效部分。 |
| `JsonSet( '{"a":{"b":"c"}}','a/b','"x"' )` | 返回 `null`。路径无效。 |
| `JsonSet( '{"a":"b"}','/a','abc' )` | 返回 `null`。值不是有效 JSON。字符串必须用引号括起来。 |

## 示例 - JsonSet 基本原理

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/JsonSet.htm)

#### 图表表达式

概述

JSON 数据以单行文本字符串的形式接收。您希望相应地更新商品的价格和订单的总价。

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 加载到名为 `Example` 的数据表中的数据集。

* 数据表中有一个名为`OrderDetails` 的字段。

加载脚本

```
Example:
Load  * 
INLINE [OrderDetails
'{ "order_id": "12345", "customer": { "name": "John Doe", "email": "john.doe@example.com"}, "items": {"product": "Laptop", "quantity": 2, "price": 1200 }, "total_price": 2400 }'
];
```

结果

加载数据并打开工作表。创建新表并将该字段添加为维度：

* ` OrderDetails
                                   `

创建以下度量：

* `JsonSet(JsonSet(OrderDetails,'/items/price',1100),'/total_price',2200)`，使用 JSON 字符串中相应键的正确路径将价格设置为 `1100` 并将总价设置为 `2200`。

结果表

| OrderDetails | JsonSet(JsonSet(OrderDetails,'/items/price',1100),'/total\_price',2200) |
| --- | --- |
| { "order\_id": "12345", "customer": { "name": "John Doe", "email": "john.doe@example.com"}, "items": {"product": "Laptop", "quantity": 2, "price": 1200 }, "total\_price": 2400 } | {"order\_id":"12345","customer":{"name":"John Doe","email":"john.doe@example.com"},"items":{"product":"Laptop","quantity":2,"price":1100},"total\_price":2200} |

度量的输出分别将 `price` 和 `total price` 键更新为 `1100` 和 `2200`。

另请参阅：

* [IsJson 脚本和图表功能](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/IsJson.htm)

* [JsonGet 脚本和图表功能](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/JsonGet.htm)