Условно добавьте поле в преобразовании JSON, используя JQ - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь преобразовать мой JSON в другую структуру, используя JQ.Я могу достичь своей новой структуры, однако я получаю поля с нулевыми объектами, если они отсутствуют в Source, мой клиент хочет удалить поля, если они имеют нулевые значения ..

При выполнении итерации яЯ могу получить структуру в новом формате.Но появляются дополнительные структуры.

Фрагмент кода- https://jqplay.org/s/w2N_Ozg9Ag

JSON

    {
              "amazon": {
                "activeitem": 2,
                "createdDate": "2019-01-15T17:36:31.588Z",
                "lastModifiedDate": "2019-01-15T17:36:31.588Z",
                "user": "net",
                "userType": "new",
                "items": [
                  {
                    "id": 1,
                    "name": "harry potter",
                    "state": "sold",
                    "type": {
                      "branded": false,
                      "description": "artwork",
                      "contentLevel": "season"
                    }
                  },
                  {
                    "id": 2,
                    "name": "adidas shoes",
                    "state": null ,
                    "type": {
                      "branded": false,
                      "description": "Spprts",
                      "contentLevel": "season"
                    }
                  },
                  {
                    "id": 3,
                    "name": "watch",
                    "type": {
                      "branded": false,
                      "description": "walking",
                      "contentLevel": "special"
                    }
                  },
                  {
                    "id": 4,
                    "name": "adidas shoes",
                    "state": "in inventory",
                    "type": {
                      "branded": false,
                      "description": "running",
                      "contentLevel": "winter"
                    }
                  }
                ],
                "product": {
                  "id": 4,
                  "name": "adidas shoes",
                  "source": "dealer",
                  "destination": "resident"
                }
              }
            }

JQ Запрос:

       .amazon | { userType: .userType,     userName: .user,     itemCatalog: (.items | map({ itemId: .id, name, state} ))   }

Ожидаемый ответ:

        {
              "userType": "new",
              "userName": "net",
              "itemCatalog": [
                {
                  "itemId": 1,
                  "name": "harry potter",
                  "state": "sold"
                },
                {
                  "itemId": 2,
                  "name": "adidas shoes"
                },
                {
                  "itemId": 3,
                  "name": "watch"
                },
                {
                  "itemId": 4,
                  "name": "adidas shoes",
                  "state": "in inventory"
                }
              ]
            }

Получив запрос, я получаю состояние: ноль для записей, которые имеют пустые или нулевые значения.Я хочу скрыть само поле в этих случаях.

1 Ответ

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

Попробуйте этот JQ Query:

jq '.amazon| { userType: .userType, userName: .user, itemCatalog: [.items[] | {id: .id, name: .name, state: .state}]}'  

Предупреждение, это не учитывает значения NULL.Так что это половина решения.

Демо

...