Chciałbym dołączyć do 2 tablic mających około 500 elementów w sposób występujący za pomocą JSONATE.

Znalazłem sposób na połączenie 2 tablicy, ale nie jest bardzo występujący. Zobacz https://try.jsonata.org/vqezdaja (te same wejście / wyjście i zapytanie są kopiowane tu poniżej).

Wejście:

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

Oczekiwany wynik:

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

zapytanie robocze , ale nie bardzo występujące w przypadku tablic z 500 elementów.

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

Aktualizacja 2020-03-29

Należy tutaj twierdzić, że zapytanie robocze (patrz wyżej) nie jest bardzo występujące. Dalsza analiza ujawniła, że to nieprawda: rzeczywista wydajność powyższego zapytania jest w porządku (podobna do wykonania zatwierdzonego zapytania). Wydajny problem, który napotkałem, był spowodowany kolejnym zapytaniem Jsonaty, które nie ma nic wspólnego z szacunkiem do tego dołączenia!

0
JanVdA 21 marzec 2020, 16:47

1 odpowiedź

Najlepsza odpowiedź

Nie jestem pewien, czy jest to bardziej występujący, ale użyłem składni dołączenia do tego:

{
    "array1": array2@$A2.table1.array1@$A1[$A1.country_region = $A2.country_region].$merge([$A1, $A2])   
}
1
Andrew Coleman 23 marzec 2020, 09:03