如何将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
相关产品推荐
相关产品推荐

