JSONSetElement

在 JSON 数据中添加或修改由对象名、数组索引或路径指定的元素。

格式 

JSONSetElement(json;键或索引或路径;值;类型)

参数 

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

键或索引或路径 - 指定 JSON 对象名(键)、数组索引或路径的文本表达式或字段。请参阅使用 JSON 函数

- 包含数字、文本或 JSON 数据的表达式或字段。

类型 - 指定要设置的数据类型的数值(参阅下文)。

返回的数据类型 

文本

原始版本 

16.0

说明 

此函数返回 json设置为指定的键或索引或路径。如果 json 参数是空白 (""),此函数会向 JSON 对象添加(在括号 { } 中),除非键或索引或路径参数的第一部分以“[”字符开始。此时,此函数向 JSON 数组(在括号 [ ] 中)添加

对于类型参数,使用以下值之一。添加到 json 时,类型参数指定是将转换为特定 JSON 类型还是插入而不改变类型。

类型参数1

参数的输入类型

输出类型

JSONString (1)

FileMaker 文本

JSON 字符串 (" ")

JSONNumber (2)

FileMaker 数字

JSON 数字

JSONObject (3)

JSON 对象

JSON 对象 ( { } )

JSONArray (4)

JSON 数组

JSON 数组 ( [ ] )

JSONBoolean (5)

FileMaker 值或 JSON 布尔值

JSON 布尔值

JSONNull (6)

忽略类型

JSON 空值

JSONRaw (0)

JSON 元素

JSON 元素(如果不是有效的 JSON,则为 JSON 字符串)

  1. 您可以使用括号中显示的命名常数或数值来指定类型,例如,JSONString 或 1—不带引号。

对于 JSONBoolean,如果“真”(True) 或非零数字,则将其视为真;如果“假”(False) 或 0,则将其视为 false。否则,按 If 函数 test 参数的方式来确定为“真” (True)还是“假” (False)。

对于 JSONRaw,JSON 分析器处理来确定其是否使用有效的 JSON 语法。如果是有效的 JSON,此函数的返回值中会使用分析得出的结果,而不将任何元素转换为 JSON 数据类型。中第一个 JSON 元素后的所有字符都将被忽略,例如,如果为“4,2”,则仅插入“4”,因为在 JSON 语法中,逗号是元素之间的分隔符。如果不是有效的 JSON,则在返回的值中将转换为 JSON 字符串。

可以在括号 [ ] 中为每个元素再提供一组键或索引或路径类型参数,从而设置多个元素。以下语法一次设置 N 个元素:

复制
JSONSetElement ( json ; [ 键或索引或路径1 ; 值1 ; 类型1 ] ; [ 键或索引或路径2 ; 值2 ; 类型2 ] ; ... [ 键或索引或路径N ; 值N ; 类型N ]
)

示例 1 

向 JSON 对象的根添加一个键及其值。

JSONSetElement ( "{ \"a\" : 11 }" ; "b" ; 22.23 ; JSONNumber ) 返回 {"a":11,"b":22.23}.

示例 2 

创建数组,使用 "[+]" 语法添加一个元素(JSON 对象),然后使用 "[:]" 语法将该元素引用为数组中的最后一个元素,以将另一个键-值对添加到对象。

复制
JSONSetElement( "[]"; 
    ["[+].a", 5, JSONNumber] ; 
    ["[:].b", 6, JSONNumber]
)

返回 [{"a":5,"b":6}]

示例 3 

添加一个 JSON 对象作为另一个 JSON 对象的元素。如果 $$JSON 变量设置为

复制
{
    "a" : {
        "id" : 12,
        "lnk" : 34
    }
}

复制
JSONFormatElements ( 
   JSONSetElement ( $$JSON ; "b" ; "{ \"id\" : 14, \"lnk\" : 73 } " ; 
      JSONObject 
   )
)

返回

复制
{
    "a"
    {
        "id" : 12,
        "lnk" : 34
    },
    "b"
    {
        "id" : 14,
        "lnk" : 73
    }
}

示例 4 

在 $$JSON 变量中存储的JSON 数据示例中,更改数组中第一个“产品”元素的“特价”和“现货”键的值。

复制
JSONFormatElements ( JSONSetElement ( $$JSON ; [ "面包店.产品[0].特价" ; 0 ; JSONBoolean ] ; [ "面包店.产品[0].现货" ; 0 ; JSONNumber ] 
   )
)

返回的数据与“产品”数组的第一个元素经如下更改后的 $$JSON 相同

复制
{
    "类别" : "面包",
    "id" : "FB1",
    "名称" : "面包圈",
    "价格" : 1.99,
    "特价" : false,
    "现货" : 0
}