FileMaker Pro 提供若干个文本函数,您的定制化 App 可通过这些函数从其他源解析和修改 JSON 数据,如通过 REST API 传输 JSON 格式数据的 Web 服务。
设置变量 [ $产品列表; 值: JSONListValues ( $$JSON ; "面包店.产品" ) ]
设置变量 [ $产品列表 ; 值: ValueCount ( $产品列表 ) ]
设置变量 [ $i; 值: 1 ]
If [ $产品数量t > 0 ]
Loop [ 刷新: 始终 ]
新建记录/请求
设置变量 [ $产品 ; 值: GetValue ( $产品列表 ; $i ) ]
设置字段 [ 产品::ID ; JSONGetElement ( $产品 ; "id" ) ]
设置字段 [ 产品::价格 ; JSONGetElement ( $产品 ; "价格" ) ]
设置字段 [ 产品::现货 ; JSONGetElement ( $产品 ; "现货" ) ]
提交记录/请求 [包括对话框: 关闭]
设置变量 [ $i ; 值: $i + 1 ]
Exit Loop If [ $i > $产品数量 ]
End Loop
End If
更改和添加 JSON 数据元素
要在 JSON 数据中更改值并添加元素,请使用
JSONSetElement函数
。
json
和
键或索引或路径
参数在此函数中像
解析 JSON 数据
所描述的那样运行。如果
键或索引或路径
指定现有元素,则该元素的值将被更改;如果元素不存在,则会添加新元素。
JSONSetElement 将指定的元素设置为
值
参数。您可以指定从简单字符串或数字到复杂对象或数组的任何有效的 JSON 值。
类型
参数指定
值
中的数据类型,以使 JSON 分析器在处理每种数据类型时都将遵循限制规则。有关支持的数据类型,请参阅
JSONSetElement函数
。要将数据插入到已设置为有效 JSON 元素格式的
json
中,请将
类型
设置为
JSONRaw
。
下面的示例将新产品的键值对添加到空的 JSON 对象中。然后,新对象添加到 $$JSON 变量中产品数组的末尾(请参阅
JSON 数据示例
)。
设置变量 [ $新产品 ; 值:
JSONSetElement ( "{}" ;
[ "id" ; "FB4" ; JSONString ] ;
[ "名称" ; "香草蛋糕" ; JSONString ] ;
[ "价格" ; 17.5 ; JSONNumber ] ;
[ "现货 ; 12 ; JSONNumber ] ;
[ "类别" ; "面包" ; JSONString ] ;
[ "特价" ; true ; JSONBoolean ]
) ]
设置变量 [ $NextIndex ; 值:
ValueCount (
JSONListKeys ( $$JSON ; "面包店.产品" )
) ]
设置变量 [ $$JSON ; 值:
JSONSetElement (
$$JSON ; "面包店.产品[" & $NextIndex & "]" ; $新产品 ;
JSONObject
) ]
另一个创建 JSON 元素的 JSON 函数是
JSONMakeArray函数
。它将值列表转换为 JSON 数组。要接受以不同方式格式化的数据,此函数允许您指定分隔每个值的字符和要使用的 JSON 数据类型。
删除 JSON 数据元素
要删除元素,请使用
JSONDeleteElement 函数
。
json
和
键或索引或路径
参数在此函数中像
解析 JSON 数据
所描述的那样运行。
键或索引或路径
参数必须指定
json
中的现有元素。
以下示例将删除产品数组中“id”键在 $$JSON 变量中的值为“FB3”的元素(请参阅
JSON 数据示例
)。
设置变量 [ $产品数量 ; 值:
ValueCount (
JSONListKeys ( $$JSON ; "面包店.产品" )
) ]
设置变量 [ $i ; 值: 0 ]
If [ $产品数量 > 0 ]
Loop [ 刷新:始终 ]
设置变量 [ $ID ; 值:
JSONGetElement ( $$JSON ; "面包店.产品[" & $i & "]id" ) ]
If [ $ID = "FB3" ]
设置变量 [ $$JSON ; 值:
JSONDeleteElement ( $$JSON ; "面包店.产品[" & $i & "]" ) ]
退出脚本 [ 文本结果: 0 ]
End If
设置变量 [ $i ; 值: $i + 1 ]
Exit Loop If [ $i ≥ $产品数量 ]
End Loop
End If
如果在解析
json
参数时出错,JSON 函数会返回"?",后面跟着一条来自 JSON 分析器的错误消息。
例如,如果
JSON 数据示例
中“面包店”键后面缺少“ :”,则计算
JSONGetElement ( $$JSON ; "面包店.产品[0]id" )
返回下面的错误消息:
? * Line 3, Column 2
Missing ':' after object member name
* Line 13, Column 5
Extra non-whitespace after JSON value.
要在使用 JSON 数据之前确定其是否有效,请使用
JSONFormatElements 函数
并测试第一个字符是否为 "?"。例如:
设置变量 [ $结果 ; 值: JSONFormatElements ( $$JSON ) ]
If [ Left ( $结果 ; 1 ) = "?" ]
# $$JSON 包含无效 JSON 数据。End If
或者,要在使用 JSON 数据前确定其是否有效,请使用
JSONGetElementType函数
以测试整个对象是否为 JSON 对象。例如:
设置变量 [ $结果 ; 值: JSONGetElementType( $$JSON, "" ) ]
If [ $结果 ≠ JSONObject ]
# $$JSON 包含无效的 JSON 数据。
End If
从 Web 服务检索 JSON 数据
使用
从 URL 插入脚本步骤
访问 Web 服务,指定要检索的信息的参数,发送和接收 HTTP 标头,并在变量或字段中存储结果。
例如,一家面包店通过 REST API 采用 JSON 格式使其产品列表可用于客户。以下脚本将当日特价列表作为 $$JSON 变量中的 JSON 数据返回:
设置变量 [ $url ; "https://bakery.example.com/rest/api/products" ]
从 URL 插入 [ 包括对话框: 关闭; 目标: $$JSON ; $url ; 验证 SSL 证书 ; cURL 选项: "--data list=特价" ]
有关在 $$JSON 中返回的数据,请参阅
JSON 数据示例
。
FileMaker Pro 还提供若干个实用程序功能,用来处理一些 REST API 所需的字符编码和加密签名:
HexDecode 函数
HexEncode 函数
TextDecode 函数
TextEncode 函数
Base64Decode 函数
Base64EncodeRFC 函数
CryptAuthCode 函数
CryptDigest 函数
CryptGenerateSignature 函数
CryptVerifySignature 函数
以下 JSON 数据示例包含一个“面包店”对象,其包含由三个“产品”对象组成的数组,每个对象都有几个键值对。
{
"面包店" :
{
"产品" :
[
{
"id" : "FB1",
"名称" : "面包圈",
"价格": 1.99,
"现货" : 43,
"类别" : "面包",
"特价" : true
},
{
"id" : "FB2",
"价格": 22.5,
"名称" : "巧克力蛋糕",
"现货" : 23,
"类别" : "蛋糕",
"特价" : true
},
{
"id" : "FB3",
"价格": 3.95,
"名称" : "法棍面包",
"现货" : 34,
"类别 : "面包",
"特价" : true
}
]
}
}
JSON 分析器保留数组中元素的顺序,但不保留对象中元素的顺序。因此,JSON 函数返回对象中的元素的顺序可能与指定的顺序不同。
在 JSON 数据中,分数数值必须使用句点“.”作为小数位分隔符,而与您计算机的系统格式指定的分隔符或者创建 FileMaker Pro 文件时使用的格式无关。
JSON 函数