Сохраните несколько пар ключ-значение json, преобразуя их с помощью jolt - PullRequest
0 голосов
/ 21 февраля 2019

Я только начал изучать толчок.Я хочу преобразовать JSON в желаемый формат.Я почти закончил, но застрял с этой точкой

Мой входной JSON выглядит как

{ "first_name": {
    "label": "First name",
    "type": "text",
    "value": "John"
  },
  "last_name": {
    "label": "Last name",
    "type": "text",
    "value": "Doe"
  },
  "email": {
    "label": "Email",
    "type": "text",
    "value": "johndoe@gmail.com"
  }
  "id": 123,
  "marital_status": "Single",
  "author_id": null,
  "company": null,
  "address": {
    "city": {
      "label": "city",
      "dom_type": "dropdown",
      "value": "test"
    },
    "state": {
      "label": "state",
      "dom_type": "dropdown",
      "value": "state"
    },
    "country": {
      "label": "country",
      "dom_type": "dropdown",
      "value": "country"
    }
  }
}

с выходным форматом, подобным этому

{
 "first_name" : "John", "last_name" : "Doe", "email" : "johndoe@gmail.com", 
 "id": 123, "marital_status": "Single", "author_id": null, "company": null,
  "address" : { "city" : "test", "state" : "test", "country" : "test" }
}

Я пробовал этот сдвигspec

[
  {
    "operation": "shift",
    "spec": {
      "address": {
        "*": {
          "@value": "address.&1"
        }
      },
      "*": {
        "@value": "&1"
      }
    }
  }
]

И получил

{
     "first_name" : "John", "last_name" : "Doe", "email" : "johndoe@gmail.com", "address" : { "city" : "test", "state" : "test", "country" : "test" }
 }

Поскольку сопоставитель "*" отбрасывает простые пары ключ-значение.Я знаю, что мне чего-то не хватает.Любая помощь?

1 Ответ

0 голосов
/ 22 февраля 2019

Поскольку сопоставитель "*" отбрасывает простые пары ключ-значение.-> Он не отбрасывает их, он сопоставляет их, но не находит под-свойства "value".

Ваши входные данные в основном в 3 различных форматах

  1. Вещи под адресом
  2. Вещи, которые имеют единственное значение, например, «id»
  3. Вещи, которые имеют вложенные данные

«*» соответствует левомусторона / ключ.

В этом случае вам нужно будет явно перечислить либо ключи, которые находятся в единственном числе, либо ключи, которые содержат вложенные данные.

Spec

[
  {
    "operation": "shift",
    "spec": {
      "address": {
        "*": {
          "@value": "address.&1"
        }
      },
      "id|marital_status|author_id|company": "&",
      "*": {
        "@value": "&1"
      }
    }
  }
]
...