0

我想使用 JSONata 以一种高性能的方式加入 2 个具有大约 500 个元素的数组。

我找到了一种加入 2 个数组的方法,但它的性能不是很好。请参阅https://try.jsonata.org/VqzeZDAjA (下面复制了相同的输入/输出和查询)。

输入 :

{
  "_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"
    }
  ]
}

工作查询,但在具有 500 个元素的数组的情况下性能不佳。

(
    $array2 := array2;
    table1 ~> | array1 | { "field_B" : 
              ($country_region := country_region;
               $array2[$country_region=$.country_region])
                .field_B}|
)

2020-03-29 更新

上面声称工作查询(见上文)的性能不是很好。进一步分析表明这不是真的:上述查询的实际性能很好(类似于批准查询的性能)。我遇到的性能问题是由另一个与此连接无关的 JSONata 查询引起的!

4

1 回答 1

1

不确定它是否更高效,但我会使用连接语法来做到这一点:

{
    "array1": array2@$A2.table1.array1@$A1[$A1.country_region = $A2.country_region].$merge([$A1, $A2])   
}
于 2020-03-23T09:03:21.973 回答