JSONata 提供条件表达式和谓词,可用于从 JSON 树中选择值。
但是,我还没有找到一种方法来测试 JSON 值的数据类型。
例如,给定数组:
[null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z}]
我只想提取数值。
[1, 2.3]
问:在 JSONata 查询中,如何测试一个值的 JSON 数据类型(null、boolean、number、string、array、object)?
JSONata 提供条件表达式和谓词,可用于从 JSON 树中选择值。
但是,我还没有找到一种方法来测试 JSON 值的数据类型。
例如,给定数组:
[null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z}]
我只想提取数值。
[1, 2.3]
问:在 JSONata 查询中,如何测试一个值的 JSON 数据类型(null、boolean、number、string、array、object)?
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
to的值null
,该特定对象的结果将更改为:
{
"priceType": "null",
"productNameType": "null",
"descriptionType": "object"
},
可以检查“null”、“number”、“string”、“array”、“object”、“boolean”。
出于我的考虑,我在将日期转换为毫秒时使用它来检查空值:
'enddate': $type($v.enddate) = 'null' ? null : $toMillis($v.enddate),
哇,今天发现了这个很酷的 JSONata。这是我的尝试:
[null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}]
*[$ ~> /^[0-9\.]{1,}$/m]
目前在 JSONata 中没有办法做到这一点。不过值得提出增强请求。
您可以检查一个值是否是一个数字value - value = 0
。如果类型是数字,它将始终为 0,因此结果将为true
。如果它是一个字符串,它将触发一个错误。