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