You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JSONata分组生成的字典结构转换为数组?

问题:将JSONata分组生成的字典结构转为数组

我正在用JSONata把扁平对象列表转换成复杂结构,已经通过分组得到了需要的对象格式,但结果是键为对象值的字典结构。我想把这些组转换成数组,请问能实现吗?需要用函数吗?我试过$spread但没达到预期效果。

输入JSON

{
  "JDEOW_EPO": [
    {
            "ItemDescription": "TEST 8.5",
            "BuildProDocument/Document/DocNumber": "11",
            "ExtendedPrice": 10.00
    },
    {
            "ItemDescription": "TEST 8.5",
            "BuildProDocument/Document/DocNumber": "11",
            "ExtendedPrice": 2.00
    },
    {
            "ItemDescription": "TEST 8.5",
            "BuildProDocument/Document/DocNumber": "12",
            "ExtendedPrice": 2.0
    }
  ]
}

当前使用的JSONata表达式

$$.JDEOW_EPO{`BuildProDocument/Document/DocNumber`: {
    "Description":$[0].ItemDescription,
    "Lines": $[].{
        "Amount":$.ExtendedPrice
    }
}}

当前输出

{
  "11": {
    "Description": "TEST 8.5",
    "Lines": [
      {
        "Amount": 10
      },
      {
        "Amount": 2
      }
    ]
  },
  "12": {
    "Description": "TEST 8.5",
    "Lines": [
      {
        "Amount": 2
      }
    ]
  }
}

期望输出

[
  {
    "Description": "TEST 8.5",
    "Lines": [
      {
        "Amount": 10
      },
      {
        "Amount": 2
      }
    ]
  },
  {
    "Description": "TEST 8.5",
    "Lines": [
      {
        "Amount": 2
      }
    ]
  }
]

解决方案

你只需要在现有表达式外层包裹$values()函数,就能把字典的所有值提取为数组,正好符合你的期望输出:

$values($$.JDEOW_EPO{`BuildProDocument/Document/DocNumber`: {
    "Description":$[0].ItemDescription,
    "Lines": $[].{
        "Amount":$.ExtendedPrice
    }
}})

原理说明

  • 你原有的表达式通过分组生成了以DocNumber为键的字典结构
  • $values()函数会提取该字典中所有的value值,并将它们组合成一个数组,直接得到你需要的格式

内容的提问来源于stack exchange,提问作者Colin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:29:51