Новичок: преобразуйте повторения json в Single Arrays и добавьте Entry Inside - PullRequest
0 голосов
/ 30 апреля 2019

Я ищу помощь Джолту. Я официально новичок, пытающийся понять, подойдет ли Jolt для использования в нашем решении. Я не могу получить следующий вывод, как я ожидал.

Мне было интересно, может ли кто-нибудь помочь мне, и посмотреть, сможет ли этот шаблон помочь в других наших потребностях в структурах того же типа. Кроме того, если у кого-то есть лучшее / лучшее чтение, которое они предлагают на Джолте, я также рад услышать об этом.

В двух словах, я пытаюсь использовать JOLT для обработки следующих потребностей:

  1. Из входных данных JSON, если имеется несколько повторений структуры, выведите эти повторения в виде массива независимых структур json.
  2. Из родительского уровня возьмите именованное совпадение SetIDAL1 и поместите в верхнюю созданную структуру json, но не как часть массива, а как его собственный элемент.

Вот пример моего ввода, который мне нужно преобразовать:

  "AL1": {
    "0": {
      "AllergenCodeMnemonicDescription": {
        "1": {
          "Text": "ASPIRIN",
          "ID": "TEST1"
        },
        "2": {
          "Text": "TYLENOL",
          "ID": "TEST2"
        }
      },
      "SetIDAL1": "1"
    },
    "1": {
      "AllergenCodeMnemonicDescription": {
        "1": {
          "Text": "ADVIL"
        }
      },
      "SetIDAL1": "2"
    }
  }
}

Моя текущая спецификация, которую я использую, похоже, очень близко подходит к мне. Однако я не могу поднять массивы на уровень выше, чтобы удалить 0: 1, и не могу зафиксировать тот факт, что я хочу, чтобы значение SetIDAL1 было помещено во вновь созданный объект массива, вместо этого он создает свой собственный объект массива. Я играл с различными другими вариантами, которые только уводят меня еще дальше. Буду признателен за любую помощь в решении и ввод / руководство, общие "умные способы" взглянуть на эту проблему.

К сожалению, у меня нет копии предыдущей работы, которую я пробовал, которая выполняла бы сопоставление для всех групп и отображала их, как ожидалось. Я начал двигаться к сопоставлению каждого отдельного объекта 0/1 под моим вводом, пытаясь понять, смогу ли я правильно «похоронить» SetIDAL, но безрезультатно. Я действительно не хочу кодировать для каждого уровня, но надеюсь, что есть решение для "под рукой" проблемы, с которой кто-то может мне помочь.

[
  {
    "operation": "shift",
    "spec": {
      "AL1": {
        "0": {
          "AllergenCodeMnemonicDescription": {
            "@": "AL1.[].AllergenCodeMnemonicDescription.[]"
          },
          "SetIDAL1": "AL1.[].SetIDAL1"
        },
        "1": {
          "AllergenCodeMnemonicDescription": {
            "*": "AL1.[].AllergenCodeMnemonicDescription.[]"
          },
          "SetIDAL1": "AL1.[].SetIDAL1"
        }
      }
    }
  }

]

вот вывод, который я получаю. Я предполагаю, что потенциально мне нужен еще один сдвиг после этого, чтобы каким-то образом довести уровни «1» / «2» до «ВВЕРХ» снова. Но я не могу получить SetIDAL1 в правильном месте, как указано ранее.

{
  "AL1" : [ {
    "AllergenCodeMnemonicDescription" : [ {
      "1" : {
        "Text" : "ASPIRIN",
        "ID" : "TEST1"
      },
      "2" : {
        "Text" : "TYLENOL",
        "ID" : "TEST2"
      }
    } ]
  }, {
    "SetIDAL1" : "1"
  }, {
    "AllergenCodeMnemonicDescription" : [ {
      "Text" : "ADVIL"
    } ]
  }, {
    "SetIDAL1" : "2"
  } ]
}

Вот вывод, который мне нужен:

{

  "AL1": [
    {
      "AllergenCodeMnemonicDescription": [
        {
          "Text": "ASPIRIN",
          "ID": "TEST1"
        },
        {
          "Text": "TYLENOL",
          "ID": "TEST2"
        }
      ],
      "SetIDAL1": "1"
    },
    {
      "AllergenCodeMnemonicDescription": [
        {
          "Text": "ADVIL"
        }
      ],
      "SetIDAL1": "2"
    }
  ]
}

1 Ответ

0 голосов
/ 04 июля 2019

Поскольку индексы начинаются с 1 (не с 0), для каждого элемента из массива Allergen было получено значение NULL для первого элемента, и его пришлось удалить в конце (не уверен, что есть лучший способ сделать это), но эти спецификациисделать трюк:

[
  {
    "operation": "shift",
    "spec": {
      "AL1": {
        "*": {
          "AllergenCodeMnemonicDescription": {
            "*": {
              "Text": "AL1.[&3].AllergenCodeMnemonicDescription.[&1].&",
              "ID": "AL1.[&3].AllergenCodeMnemonicDescription.[&1].&"
            }
          },
          "SetIDAL1": "AL1.[&1].&"
        }
      }
    }
  },
  {
    "operation": "remove",
    "spec": {
      "AL1": {
        "*": {
          "AllergenCodeMnemonicDescription": {
            "0": ""
          }
        }
      }
    }
  }
]
...