新手:将json重复转换为单个数组并在其中添加Entry

时间:2019-04-30 20:26:26

标签: jolt

我正在寻找Jolt的帮助。我正式是一名新手,试图了解Jolt是否足以在我们的解决方案中使用。我似乎无法获得我期望的以下输出。

我想知道是否有人可以帮助我,看看这个模板是否能够满足我们对相同结构的其他需求。另外,如果有人对Jolt建议阅读最好/更好,那么我也很高兴听到这一消息。

简而言之,我正在尝试使用JOLT来满足以下需求:

  1. 从JSON输入中,如果一个结构存在多个重复,则将这些重复输出为独立json结构的数组。
  2. 从父级开始,使用命名的MatchSetIDAL1并将其放入创建的顶部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 :(得分:0)

由于索引从1开始(而不是0)从每个Allergen数组的第一个元素获取空值,因此必须在最后将其删除(不确定是否有更好的方法来执行此操作),但是此规范将做到这一点:

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