Преобразование толчка — повторите список в списке и сформируйте единый список

#json #jolt

Вопрос:

Я пытаюсь перебирать списки внутри списка и формировать единый список с несколькими объектами. Повторяя списки, я в состоянии добиться. Но применение тегов перед повторением списка к каждому объекту не происходит, если в одном списке больше объектов.

Мой запрос на ввод выглядит следующим образом:

 [
  {
    "success": [
      {
        "id": "4",
        "Offers": [
          {
            "name": "Optional",
            "type": {
              "id": "1",
              "name": "Optional"
            },
            "productOfferings": [
              {
                "id": "3",
                "name": "Test1"
              }
            ]
          },
          {
            "name": "Default",
            "type": {
              "id": "2",
              "name": "Default"
            },
            "productOfferings": [
              {
                "id": "1",
                "name": "Test2"
              },
              {
                "id": "2",
                "name": "Test3"
              }
            ]
          }
        ]
      }
    ]
  }
]
 

Моя спецификация выглядит так, как показано ниже:

 
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "success": {
          "*": {
            "Offers": {
              "*": {
                "name": "[amp;1].[amp;3].typeName",
                "type": {
                  "id": "[amp;2].[amp;4].typeNameId",
                  "name": "[amp;2].[amp;4].typeNameValue"
                },
                "productOfferings": {
                  "*": {
                    "id": "[amp;3].[amp;1].id",
                    "name": "[amp;3].[amp;1].name"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[]"
      }
  }
    }
]
 

Output Received from spec:

 [
  {
    "typeName": "Optional",
    "typeNameId": "1",
    "typeNameValue": "Optional",
    "id": "3",
    "name": "Test1"
  },
  {
    "typeName": "Default",
    "typeNameId": "2",
    "typeNameValue": "Default",
    "id": "1",
    "name": "Test2"
  },
  {
    "id": "2",
    "name": "Test3"
  }
]
 

Но ожидаемый результат, как показано ниже:

 [
  {
    "typeName": "Optional",
    "typeNameId": "1",
    "typeNameValue": "Optional",
    "id": "3",
    "name": "Test1"
  },
  {
    "typeName": "Default",
    "typeNameId": "2",
    "typeNameValue": "Default",
    "id": "1",
    "name": "Test2"
  },
  {
    "typeName": "Default",
    "typeNameId": "2",
    "typeNameValue": "Default",
    "id": "2",
    "name": "Test3"
  }
]
 

Если внутри объекта productOfferings есть еще объекты, я не могу добавить typeName,typeNameId, typeNameValue к фактическому объекту. Пожалуйста, помогите устранить эту проблему.

Комментарии:

1. @Барбарос Ожан спасибо за решение.

2. пожалуйста.

Ответ №1:

Похоже, вам просто нужно собрать все в массив productOfferings, добавляя к каждому ключу общий идентификатор [amp;3].[amp;1] , такой как

 [
  {
    "operation": "shift",
    "spec": {
      "*": {
        "success": {
          "*": {
            "Offers": {
              "*": {
                "productOfferings": {
                  "*": {
                    "@(2,name)": "[amp;3].[amp;1].typeName",
                    "@(2,type.id)": "[amp;3].[amp;1].typeNameId",
                    "@(2,type.name)": "[amp;3].[amp;1].typeNameValue",
                    "*": "[amp;3].[amp;1].amp;"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[]"
      }
    }
  }
]