JSONParsedState

如果 JSON 未解析,则返回 0,如有解析但无效,则返回 -1,如有解析且有效,则返回表示 JSON 类型的正数。

格式 

JSONParsedState ( json )

参数 

json - 包含 JSON 对象或数组的文本表达式或字段。

返回的数据类型 

数字

原始版本 

22.0

说明 

JSONParsedState 表示指定的 JSON 是否已被解析(并且在内存中具有二进制表示),以及 JSON 是有效还是无效。此函数返回:

  • 0 如果 JSON 尚未被解析(内存中不存在二进制表示)。

  • -1 如果 JSON 被解析但无效。如果这个 JSON 与其他 JSON 函数一起使用,它们会返回“?” 后跟一条错误消息。

  • 1-6 如果 JSON 有效且已解析。该值对应于 JSONSetElement 中定义的 JSON 类型之一。

要显式解析 JSON 文本,请使用 JSONParse函数

示例 1 

  1. JSONParse ( "[3]" ) 返回 [3],因为如果 JSONParse 是有效的 JSON,则将输入 JSON 作为文本返回。

  2. Let ( $a = JSONParse ("[3") ; JSONParsedState ($a) ) 返回 -1,因为 $a 设置为已解析但无效的 JSON 数组。

  3. Let ( $a = "[3]" ; JSONParsedState ($a) ) 返回 0,因为 $a 没有被解析。

  4. JSONParsedState ( JSONParse (Pi) ) 返回 -1,因为值 Pi 已解析,但不是有效的 JSON。

  5. Let ( $a = JSONSetElement ( "" ; "a" ; "b" ; JSONString ) ; JSONParsedState ($a) ) 返回 3,因为 JSONSetElement 创建了一个解析的 JSON 对象存储在 $a 中。

  6. Let ( $a = JSONParse ("[3]") ; JSONParsedState ($a) ) 返回 4,因为 $a 已解析并且包含一个 JSON 数组。

  7. JSONParsedState ( JSONParse ("") ) 返回 -1,因为解析了一个空字符串,这是无效的 JSON。

示例 2 

复制
Let ( [
  a = "[3";                      /* 字符串是无效的 JSON 数组 */
  b = JSONParse ( a ) ;          /* 错误: 输入是无效的 JSON */
  c = JSONParsedState ( a ) ;    /* 0: 'a' 还只是文本 (未解析) */
  d = JSONParsedState ( b ) ;    /* -1: 'b' 已解析但无效 */
  e = JSONFormatElements ( b ) ; /* 错误: 'b' 无效 */
  f = JSONFormatElements ( a )   /* 错误: 'a' 中的 JSON 文本无效 */
] ;
  a &¶& b &¶& c &¶& d &¶& e &¶& f
)

返回:

复制
[3
? * 第 1 行、第 3 列
  数组声明中缺少 ',' 或 ']'
0
-1
? * 第 1 行、第 3 列
  数组声明中缺少 ',' 或 ']'
? * 第 1 行、第 3 列
  数组声明中缺少 ',' 或 ']'

相比之下,如果变量 a 是有效的 JSON 数组 ("[3]"),则此示例返回:

复制
[3]
[3]
0
4
[ 3 ]
[ 3 ]

注意以下差异:

  • 第 2 行:JSONParse ( a ) 返回传递给 JSONParse 的原始文本。

  • 第 4 行:JSONParsedState ( b ) 反映变量 b 已解析,并且是一个有效的 JSON 数组。

  • 第 5 行和第 6 行:JSONFormatElements 返回 b 中解析的 JSON 和 a 中文本 JSON 的格式化文本。