3

JSONata 提供条件表达式和谓词,可用于从 JSON 树中选择值。

但是,我还没有找到一种方法来测试 JSON 值的数据类型。

例如,给定数组:

    [null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z}]

我只想提取数值。

    [1, 2.3]

问:在 JSONata 查询中,如何测试一个值的 JSON 数据类型(null、boolean、number、string、array、object)?

4

4 回答 4

2

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 中更改PriceProduct Nameto的值null,该特定对象的结果将更改为:

{
    "priceType": "null",
    "productNameType": "null",
    "descriptionType": "object"
},

可以检查“null”、“number”、“string”、“array”、“object”、“boolean”。

出于我的考虑,我在将日期转换为毫秒时使用它来检查空值:

'enddate': $type($v.enddate) = 'null' ? null : $toMillis($v.enddate),
于 2020-02-17T12:01:07.093 回答
2

哇,今天发现了这个很酷的 JSONata。这是我的尝试:

http://try.jsonata.org/

 [null, true, false, 1, 2.3, "a", ["x"], {}, {"y" : "z"}]
*[$ ~> /^[0-9\.]{1,}$/m]
于 2019-04-22T09:09:32.823 回答
2

目前在 JSONata 中没有办法做到这一点。不过值得提出增强请求。

于 2018-04-18T13:22:53.290 回答
0

您可以检查一个值是否是一个数字value - value = 0。如果类型是数字,它将始终为 0,因此结果将为true。如果它是一个字符串,它将触发一个错误。

于 2019-01-28T07:10:47.960 回答