# JsonGet 脚本和图表功能

JsonGet() 返回 JSON（JavaScript 对象表示法）数据字符串的路径。数据必须是有效的 JSON，但可以包含额外的空格或换行符。

语法：

value JsonGet(json, path)

返回数据类型： 双

参数

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

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

| 示例 | 结果 |
| --- | --- |
| `JsonGet( '{"a":{"xyz":"XYZ"},"b":[123,"abc","ABC"]}', '' )` | 返回 `{"a":{"xyz":"XYZ"},"b":[123,"abc","ABC"]}` |
| `JsonGet( '{"a":{"xyz":"XYZ"},"b":[123,"abc","ABC"]}', '/a' )` | 返回 `{"xyz":"XYZ"}` |
| `JsonGet( '{"a":{"xyz":"XYZ"},"b":[123,"abc","ABC"]}', '/a/xyz' )` | 返回 `"XYZ"` |
| `JsonGet( '{"a":{"xyz":"XYZ"},"b":[123,"abc","ABC"]}', '/b' )` | 返回 `[123,"abc","ABC"]` |
| `JsonGet( '{"a":{"xyz":"XYZ"},"b":[123,"abc","ABC"]}', '/b/0' )` | 返回 `123` |
| `JsonGet( '{"a":{"xyz":"XYZ"},"b":[123,"abc","ABC"]}', '/b/1' )` | 返回 `abc` |
| `JsonGet( '{"a":{"xyz":"XYZ"},"b":[123,"abc","ABC"]}', '/b/2' )` | 返回 `ABC` |
| `JsonGet( '{"a":"b"}','/b' )` | 返回 `null`。路径未指向 JSON 数据的有效部分。 |
| `JsonGet( '{"a"}','/a' )` | 返回 `null`。JSON 数据不是有效的 JSON（成员 `"a"` 没有值）。 |

## 示例 - JsonGet 基本原理

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/JsonGet.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
                                   `

创建以下度量：

* `IsJson( JsonGet ( OrderDetails, '/items/price' ), 'number' )`，结合 ``IsJson 函数，检索 `price` 的 JSON 文本并验证 `price` 的值是否为数字。

* `JsonGet( OrderDetails, '/customer/email' )`，用来使用正确的路径检索客户电子邮件地址。

* `JsonGet( OrderDetails, '/total_price' ), )`，使用正确的路径检索总价。

结果表

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

第一个度量返回 `-1 true` ，因为 `price` 键的值是 `1200` ，这是一个数字。

第二个度量使用 JSON 字符串中 `email` 键的正确路径，从 `OrderDetails` 返回客户电子邮件地址 `john.doe@example.com` 。

第三个度量返回 `2400` ，这是来自`OrderDetails` 字段的订单总价，使用的是 JSON 字符串中 `total_price` 键的正确路径。

另请参阅：

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

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