JSONata 提供了条件表达式和谓词,可用于从 JSON 树中选择值。
但是,我无法找到测试JSON值数据类型的方法。
例如,给定数组:
[null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z}]
我只想拉出数值。
[1, 2.3]
问:在 JSONata 查询中,如何测试值的 JSON 数据类型(空值、布尔值、数字、字符串、数组、对象(?
目前在 JSONata 中无法执行此操作。 不过值得一个增强请求。
哇,今天发现了这个很酷的JSONata。这是我的尝试:
http://try.jsonata.org/
[null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}]
*[$ ~> /^[0-9.]{1,}$/m]
JSONata 提供了 $type
-方法来检查 JSON 值的数据类型。例如。以下代码片段将返回 https://try.jsonata.org 中的发票示例数据中值的数据类型。
Account.Order.Product.{
"priceType": $type(Price),
"productNameType": $type($.'Product Name'),
"descriptionType": $type(Description)
}
结果是:
[
{
"priceType": "number",
"productNameType": "string",
"descriptionType": "object"
},
{
"priceType": "number",
"productNameType": "string",
"descriptionType": "object"
},
{
"priceType": "number",
"productNameType": "string",
"descriptionType": "object"
},
{
"priceType": "number",
"productNameType": "string",
"descriptionType": "object"
}
]
通过将示例中 JSON 中的 Price
和 Product Name
的值更改为null
,该特定对象的结果将更改为:
{
"priceType": "null",
"productNameType": "null",
"descriptionType": "object"
},
可以检查"null","数字","字符串","数组","对象","布尔值"。
出于我的担忧,我在将日期转换为毫秒时使用它来检查空值:
'enddate': $type($v.enddate) = 'null' ? null : $toMillis($v.enddate),
您可以检查值是否是执行value - value = 0
的数字。如果类型是数字,它将始终为 0,因此结果将为 true
。如果是字符串,它将触发错误。