JSONParse
将文本解析为 JSON 数据,并将解析的 JSON 表示保留在内存中,以便与其他 JSON 函数一起重复使用。
格式
JSONParse ( json )
参数
json
- 包含 JSON 对象或数组的文本表达式或字段。
返回的数据类型
文本
原始版本
22.0
说明
JSONParse 首先评估输入 json
文本表达式,然后解析 JSON 文本并在内存中缓存二进制表示。当 JSONParse 设置变量、脚本参数或用于其他计算时,此二进制表示可用于其他 JSON 函数来处理解析数据。
如果 json
有效,JSONParse 返回原始文本不变,如果无效,则返回错误消息。对于无效的 JSON,JSONParse 返回一条以“?”开头的错误消息然后是关于解析错误的详细信息,类似于其他 JSON 函数。
请参阅优化 JSON 性能。
注释
-
对于单个JSON操作而言,直接对文本使用其他 JSON 函数进行处理,其性能表现可能与先使用 JSONParse 函数解析不相上下。
-
您可以使用 JSONParsedState函数来验证 JSON 数据是否已成功解析并且是否有效。
示例 1 - 简单 JSON 对象的基本解析
JSONParse ( "{ \"name\": \"Alea\", \"age\": 30, \"city\": \"New York\" }" )
returns { "name": "Alea", "age": 30, "city": "New York" },这是 JSON 数据的未更改的文本表示。
如果设置为变量 $$Contact,二进制表示会缓存在内存中,并可用于使用 $$Contact 的计算。
Let ( [
$$Contact = JSONParse ( "{ \"姓名\": \"Alea\", \"年龄\": 30, \"城市\": \"纽约\" }" )
] ;
$$Contact
)
如果 JSON 无效,JSONParse 会解析数据,但返回一条错误消息。例如,如果上面的 JSON 中缺少第一个逗号,JSONParse 将返回:
? * 行 1、列 18
对象声明中缺少 ',' 或 '}'
示例 2 -解析多个 JSON 对象
使用 JSONParse 解析 $JSONText1 和 $JSONText2 中的 JSON 文本,然后从变量 $ParsedJSON1 和 $ParsedJSON2 中检索元素,而不会导致 JSON 数据再次被解析。
设置变量 [ $ParsedJSON1 ; 值: JSONParse ( $JSONText1 ) ]
设置变量 [ $ParsedJSON2 ; Value: JSONParse ( $JSONText2 ) ]
设置变量 [ $name ; Value: JSONGetElement ( $ParsedJSON1 ; "名称" ) ]
设置变量 [ $id ; Value: JSONGetElement ( $ParsedJSON2 ; "id" ) ]
设置变量 [ $category ; 值: JSONGetElement ( $ParsedJSON1 ; "类别" ) ]
示例 3 - 错误检查和在循环中使用解析的 JSON
演示错误检查,并展示如何在循环中处理来自同一 JSON 数据的多个元素时使用 JSONParse 来提高性能。$$JSON 包含JSON 数据示例中的 JSON 文本。脚本解析 $$JSON 后,它会检查解析的JSON是否有效(当JSONParsedState函数返回正值时)。如果解析的 JSON 有效,脚本会循环浏览 bakery.product
数组,并从已解析的 JSON 数据中获取值。
设置变量 [ $ParsedJSON ; 值: JSONParse ( $$JSON ) ]
If [ JSONParsedState ( $ParsedJSON ) > 0 ]
# JSON 有效。 使用解析的 JSON 进行多重操作。设置变量 [ $ProductCount ; 值: ValueCount ( JSONListKeys ( $ParsedJSON ; "bakery.product" ) ) ]
设置变量 [ $i ; 值: 0 ]
Loop [ 刷新: 始终 ]
设置变量 [ $Product ; 值: JSONGetElement ( $ParsedJSON ; "bakery.product[" & $i & "]" ) ]
设置变量 [ $ProductName ; 值: JSONGetElement ( $Product ; "名称" ) ]
设置变量 [ $ProductPrice ; 值: JSONGetElement ( $Product ; "价格" ) ]
# 处理产品数据...
设置变量 [ $i ; 值: $i + 1 ]
Exit Loop If [ $i ≥ $ProductCount ]
End Loop
Else
# Handle JSON parsing error
显示自定义对话框 [ "JSON Error" ; $ParsedJSON ]
End If