JSONata 中的组值
Group Values in JSONata
是否可以通过 JSONata 按特定属性对项目进行分组
例如,按照 resultDate 中的值对 json 进行分组。
"Export": [
{
"code": "18724-100",
"resultDate": "11.03.2018 13:11:48"
},
{
"code": "18724-5",
"resultDate": "11.03.2018 13:11:48"
},
{
"code": "18724-99",
"resultDate": "14.03.2018 14:11:48"
}
]
生成以下输出:
"Export": [
{
"resultDate": "11.03.2018 13:11:48",
"codes": [
{
"code": "18724-100"
},
{
"code": "18724-5"
}
]
},
{
"resultDate": "14.03.2018 13:11:48",
"codes": [
{
"code": "18724-99"
}
]
}
]
也许可以使用 reduce 函数对与此博客中描述的相似的元素进行分组 post。 https://www.datchley.name/getting-functional-with-javascript-part-2/
每当我需要按公共 属性(如 resultDate
)对某些对象进行分组时,我会使用 属性 的值作为键来创建一个对象,然后删除属性 来自每个原始对象。然后我使用 $spread()
函数将那个大对象拆分为一个对象数组,每个对象都有一个 属性。最后一步是用原始 属性 名称替换每个对象的第一个(也是唯一一个)键。
执行此操作的 JSONata 表达式有点复杂:
{
"Export": $spread(Export {
resultDate: [
$ ~> | $ | {}, "resultDate" |
]
}).{
"resultDate": $keys()[0],
"codes": *
}
}
您可以前往 this exerciser link 亲自尝试。
以下表达式可用于此:
{
"Export": Export{resultDate: code[]} ~> $each(function($v, $k) {
{
"resultDate": $k,
"codes": $v.{"code": $}
}
})
}
第一部分 Export{resultDate: code[]}
按 resultDate
对数据进行分组,然后 $each
函数迭代 name/value 对以生成输出。一旦将 $distinct
函数添加到语言 (https://github.com/jsonata-js/jsonata/issues/117)
中,这样的表达式可能会更容易
另一种一般分组方式是:
- 使用要分组的键创建结果结构
- 之后取值数组
PS。我喜欢 Andrew Coleman 不过回答更好
所以对于这个问题,应该是这样的:
${
resultDate: {
"resultDate": $distinct(resultDate),
"codes": code.{"code": $}
}
} ~> $each(function($v){$v})
是否可以通过 JSONata 按特定属性对项目进行分组
例如,按照 resultDate 中的值对 json 进行分组。
"Export": [
{
"code": "18724-100",
"resultDate": "11.03.2018 13:11:48"
},
{
"code": "18724-5",
"resultDate": "11.03.2018 13:11:48"
},
{
"code": "18724-99",
"resultDate": "14.03.2018 14:11:48"
}
]
生成以下输出:
"Export": [
{
"resultDate": "11.03.2018 13:11:48",
"codes": [
{
"code": "18724-100"
},
{
"code": "18724-5"
}
]
},
{
"resultDate": "14.03.2018 13:11:48",
"codes": [
{
"code": "18724-99"
}
]
}
]
也许可以使用 reduce 函数对与此博客中描述的相似的元素进行分组 post。 https://www.datchley.name/getting-functional-with-javascript-part-2/
每当我需要按公共 属性(如 resultDate
)对某些对象进行分组时,我会使用 属性 的值作为键来创建一个对象,然后删除属性 来自每个原始对象。然后我使用 $spread()
函数将那个大对象拆分为一个对象数组,每个对象都有一个 属性。最后一步是用原始 属性 名称替换每个对象的第一个(也是唯一一个)键。
执行此操作的 JSONata 表达式有点复杂:
{
"Export": $spread(Export {
resultDate: [
$ ~> | $ | {}, "resultDate" |
]
}).{
"resultDate": $keys()[0],
"codes": *
}
}
您可以前往 this exerciser link 亲自尝试。
以下表达式可用于此:
{
"Export": Export{resultDate: code[]} ~> $each(function($v, $k) {
{
"resultDate": $k,
"codes": $v.{"code": $}
}
})
}
第一部分 Export{resultDate: code[]}
按 resultDate
对数据进行分组,然后 $each
函数迭代 name/value 对以生成输出。一旦将 $distinct
函数添加到语言 (https://github.com/jsonata-js/jsonata/issues/117)
另一种一般分组方式是:
- 使用要分组的键创建结果结构
- 之后取值数组
PS。我喜欢 Andrew Coleman 不过回答更好
所以对于这个问题,应该是这样的:
${
resultDate: {
"resultDate": $distinct(resultDate),
"codes": code.{"code": $}
}
} ~> $each(function($v){$v})