Нужны технические характеристики для преобразования ниже - PullRequest
0 голосов
/ 30 марта 2020

Может ли кто-нибудь помочь преобразовать перечисленные ниже входные данные json в желаемый вывод json, используя jolt?

Здесь, в списке древовидных полей, я хочу получить «paramid» и «paramvalue» на первый уровень только для совпадающего «paramid», остальные элементы списка должны быть неповрежденными в этом древовидном списке.

например, я хочу перевести парамиду "k1" со значением на первый уровень, как указано в выходных данных.

Ввод

  {
    "A": "value1",
    "B": "value2",
    "C": {
      "D": "x1",
      "E": {
        "treefield": [
          {
            "paramid": "k1",
            "paramvalue": {
              "string": "value1"
            }
          },
          {
            "paramid": "k2",
            "paramvalue": {
              "string": "value2"
            }
          },
          {
            "paramid": "k3",
            "paramvalue": {
              "string": "value3"
            }
          }       
        ]
      },
      "F": {
        "a": "x1",
        "x": {
          "y": 1
        }
      },
      "H": "x4"
    }
  }
]```


**Output**

```[
  {
    "A": "value1",
    "B": "value2",
    "C": {
      "D": "x1",
      "E": {
        "treefield": [
          {
            "paramid": "k1",
            "paramvalue": {
              "string": "value1"
            }
          },
          {
            "paramid": "k3",
            "paramvalue": {
              "string": "value3"
            }
          }
        ]
      },
      "F": {
        "a": "x1",
        "x": {
          "y": 1
        }
      },
      "H": "x4"
    },
    "k2": "value2"
  }
]```

1 Ответ

0 голосов
/ 31 марта 2020

Если я понимаю, что вы пытаетесь сделать (вытащить пары ключ / значение и поместить их на верхний уровень), это упражнение c должно сделать это:

[
  {
    "operation": "shift",
    "spec": {
      "C": {
        "E": {
          "treefield": {
            "*": {
              "paramvalue": {
                "string": "@(2,paramid)"
              }
            }
          }
        },
        "*": "&"
      },
      "*": "&"
    }
  }
]

Это работает на отдельные JSON объекты. В вашем примере ввода у вас нет ведущей скобки массива, но у вас есть конечная, поэтому если вы ожидаете, что несколько объектов в массиве и хотите, чтобы они выводились в массиве, это spe c должно работать:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "C": {
          "E": {
            "treefield": {
              "*": {
                "paramvalue": {
                  "string": "[&6].@(2,paramid)"
                }
              }
            }
          },
          "*": "[&2].&"
        },
        "*": "[&1].&"
      }
    }
  }
]
...