JSONata - 如何按键值排序?
JSONata - How to order by value of keys?
我有这个 JSON 对象数组:
payload:[
{name: "product1", price: 1.25},
{name: "product2", price: 1.35},
{name: "product1", price: 1.20},
{name: "product2", price: 1.30},
{name: "product3", price: 1.40}, etc
]
我正在尝试使用 JSONata 生成一个新数组,其中包含每个产品的平均价格(按产品名称分组)并按 $average(price) 的结果排序。
payload{name:$average(price)}^(?) // what does ? need to be
我基本上想知道如何引用每个 key/value 对的值以供 sorting/order-by 使用。
谢谢,
表达式的第一部分,payload{name:$average(price)}
产生一个对象,而不是数组,所以没有什么可排序的。请记住,在 JSON 中,一个对象是一组无序的 name/value 对。如果你想创建一个有序的对象数组,类似于你的输入数据,但像你所做的那样聚合,那么你可以使用以下内容:
payload{name:$average(price)} ~> $each(function($v, $n) {{
'name': $n,
'avg': $v
}}) ^(avg)
最后一部分通过增加平均价格来对数组进行排序。这会产生结果:
[
{ "name": "product1", "avg": 1.225 },
{ "name": "product2", "avg": 1.325 },
{ "name": "product3", "avg": 1.4 }
]
我有这个 JSON 对象数组:
payload:[
{name: "product1", price: 1.25},
{name: "product2", price: 1.35},
{name: "product1", price: 1.20},
{name: "product2", price: 1.30},
{name: "product3", price: 1.40}, etc
]
我正在尝试使用 JSONata 生成一个新数组,其中包含每个产品的平均价格(按产品名称分组)并按 $average(price) 的结果排序。
payload{name:$average(price)}^(?) // what does ? need to be
我基本上想知道如何引用每个 key/value 对的值以供 sorting/order-by 使用。
谢谢,
表达式的第一部分,payload{name:$average(price)}
产生一个对象,而不是数组,所以没有什么可排序的。请记住,在 JSON 中,一个对象是一组无序的 name/value 对。如果你想创建一个有序的对象数组,类似于你的输入数据,但像你所做的那样聚合,那么你可以使用以下内容:
payload{name:$average(price)} ~> $each(function($v, $n) {{
'name': $n,
'avg': $v
}}) ^(avg)
最后一部分通过增加平均价格来对数组进行排序。这会产生结果:
[
{ "name": "product1", "avg": 1.225 },
{ "name": "product2", "avg": 1.325 },
{ "name": "product3", "avg": 1.4 }
]