如何使用 jSONata 以高效的方式连接 2 个数组?
How to join 2 arrays in a performant way using jSONata?
我想使用 JSONata 以高效的方式加入 2 个具有大约 500 个元素的数组。
我找到了一种连接 2 个数组的方法,但它的性能不是很好。
请参阅 https://try.jsonata.org/VqzeZDAjA(下面复制了相同的 input/output 和查询)。
输入:
{
"_msgid": "a070e32c.e71ed",
"topic": "",
"rc": {
"code": 0
},
"table1": {
"array1": [
{
"country_region": "Thailand",
"field_A": "A for Thailand"
},
{
"country_region": "Japan",
"field_A": "A for Japan"
}
]
},
"array2": [
{
"country_region": "Thailand",
"field_B": "B for Thailand"
},
{
"country_region": "Japan",
"field_B": "B for Japan"
}
]
}
预期输出:
{
"array1": [
{
"country_region": "Thailand",
"field_A": "A for Thailand",
"field_B": "B for Thailand"
},
{
"country_region": "Japan",
"field_A": "A for Japan",
"field_B": "B for Japan"
}
]
}
工作查询[=32=]但在包含 500 个元素的数组的情况下性能不佳。
(
$array2 := array2;
table1 ~> | array1 | { "field_B" :
($country_region := country_region;
$array2[$country_region=$.country_region])
.field_B}|
)
更新2020-03-29
上面声称工作查询(见上文)的性能不是很好。进一步分析表明这不是真的:上述查询的实际性能很好(与批准的查询的性能相似)。我遇到的性能问题是由另一个与此连接无关的 JSONata 查询引起的!
不确定它是否更高效,但我会使用连接语法来执行此操作:
{
"array1": array2@$A2.table1.array1@$A1[$A1.country_region = $A2.country_region].$merge([$A1, $A2])
}
我想使用 JSONata 以高效的方式加入 2 个具有大约 500 个元素的数组。
我找到了一种连接 2 个数组的方法,但它的性能不是很好。 请参阅 https://try.jsonata.org/VqzeZDAjA(下面复制了相同的 input/output 和查询)。
输入:
{
"_msgid": "a070e32c.e71ed",
"topic": "",
"rc": {
"code": 0
},
"table1": {
"array1": [
{
"country_region": "Thailand",
"field_A": "A for Thailand"
},
{
"country_region": "Japan",
"field_A": "A for Japan"
}
]
},
"array2": [
{
"country_region": "Thailand",
"field_B": "B for Thailand"
},
{
"country_region": "Japan",
"field_B": "B for Japan"
}
]
}
预期输出:
{
"array1": [
{
"country_region": "Thailand",
"field_A": "A for Thailand",
"field_B": "B for Thailand"
},
{
"country_region": "Japan",
"field_A": "A for Japan",
"field_B": "B for Japan"
}
]
}
工作查询[=32=]但在包含 500 个元素的数组的情况下性能不佳。
(
$array2 := array2;
table1 ~> | array1 | { "field_B" :
($country_region := country_region;
$array2[$country_region=$.country_region])
.field_B}|
)
更新2020-03-29
上面声称工作查询(见上文)的性能不是很好。进一步分析表明这不是真的:上述查询的实际性能很好(与批准的查询的性能相似)。我遇到的性能问题是由另一个与此连接无关的 JSONata 查询引起的!
不确定它是否更高效,但我会使用连接语法来执行此操作:
{
"array1": array2@$A2.table1.array1@$A1[$A1.country_region = $A2.country_region].$merge([$A1, $A2])
}