如何在JSONata查询中测试JSON值的数据类型?
好问题!JSONata其实内置了专门的类型检测函数,完全能搞定你说的筛选需求。我给你详细拆解每种JSON类型的判断方法,再结合你的示例给出具体查询:
JSONata数据类型检测指南
数字类型(Number)
要筛选整数或浮点数,用$isNumber()函数——它会在值为数字时返回true。针对你给出的数组,提取数值的查询可以用简化写法:
$filter([null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}], $isNumber($))
执行后会得到你想要的结果:[1, 2.3]
布尔类型(Boolean)
检测true或false用$isBoolean():
$filter([null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}], $isBoolean($))
返回结果:[true, false]
字符串类型(String)
判断字符串用$isString():
$filter([null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}], $isString($))
返回结果:["a"]
数组类型(Array)
检测数组用$isArray():
$filter([null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}], $isArray($))
返回结果:[["x"]]
对象类型(Object)
普通JSON对象(包括空对象)可以用$isObject()检测:
$filter([null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}], $isObject($))
返回结果:[{}, {"y" : "z"}]
Null类型
检测null值用$isNull():
$filter([null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}], $isNull($))
返回结果:[null]
灵活的$type()函数
除了上面的$isXxx()系列函数,JSONata还有$type()函数——它会返回值的类型名称字符串(比如"number"、"boolean")。如果你需要更灵活的类型判断(比如动态匹配类型),可以用它:
比如筛选数字的另一种写法:
$filter([null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}], $type($) = "number")
效果和$isNumber()完全一致。
这些函数覆盖了所有标准JSON类型的检测场景,你可以根据自己的习惯选择使用~
内容的提问来源于stack exchange,提问作者MTH
相关产品推荐
相关产品推荐

