0

我需要在遍历子数组项时获取数组的名称。例如,如果我的输入看起来像

{"title": [
  {
    "value": "18724-100",
    "locale": "en-GB"
  },
  {
    "value": "18724-5",
    "locale": "en-GB"
  },
  {
    "value": "18724-99",
    "locale": "fr-FR"
  }
]}

我需要输出为

{
  "data": [
    {
      "locale": "en-GB",
      "metadata": [
        {
          "key": "title",
          "value": "18724-100"
        },
        {
          "key": "title",
          "value": "18724-5"
        }
      ]
    },
    {
      "locale": "fr-FR",
      "metadata": {
        "key": "title",
        "value": "18724-99"
      }
    }
  ]
}

我尝试在 JSONata 中遵循规范

{
  "data": title{locale: value[]} ~> $each(function($v, $k) {
    {
      "locale": $k,
      "metadata": $v.{"key": ???,"value": $}
      
    }
  })
}

请帮我填写“???” 这样我就可以获得数组名称

4

1 回答 1

1

假设输入对象总是有一个单一的根级键,你可以这样写你的表达式:

{
  "data": title{locale: value[]} ~> $each(function($v, $k) {
    {
      "locale": $k,
      "metadata": $v.{"key": $keys($$)[0],"value": $}
      
    }
  })
}

$keys返回一个包含对象中键的数组。$keys($$)将返回此数组根级中的所有键(在本例中为:)"title"

请注意,对于以下输入对象:

{"title": [
    {
      "value": "18724-100",
      "locale": "en-GB"
    },
    {
      "value": "18724-5",
      "locale": "en-GB"
    },
    {
      "value": "18724-99",
      "locale": "fr-FR"
    }
  ], 
  "foo": 123
}

$keys($$)["title", "foo"]将返回一个包含两个元素 ( )的数组。

于 2022-02-24T11:58:10.950 回答