当前位置: 首页 > 知识库问答 >
问题:

如何定义适用于数组和值的Jolt规范

仲皓君
2023-03-14

描述我正在处理一个需要JSON到JSON转换的问题,所以我使用Jolt库来解决这个问题。我的输入JSON文档中有一些节点,它们有时可以作为对象数组出现,有时可以作为普通对象出现。我无法定义适用于对象数组和单个对象的Jolt规范。

要求如果节点包含对象数组,则从数组中获取第0个元素并将其映射到输出JSON。

颠簸规格

[
  {
    "operation": "cardinality",
    "spec": {
      "patient": {
        "@": "ONE",
        "*": "ONE"
      }
    }
    },
  {
    "operation": "shift",
    "spec": {
      "patient": {
        "dateOfBirth": "patient.dateOfBirth",
        "firstName": "patient.firstName",
        "lastName": "patient.lastName"
      }
    }
  }
]

输入JSON(JSON规范适用于此输入)

{
  "patient": [
    {
      "dateOfBirth": [
        "19890101",
        "19890101"
      ],
      "firstName": "Test",
      "lastName": "Test"
    },
    {
      "dateOfBirth": [
        "19890101",
        "19890101"
      ],
      "firstName": "Test",
      "lastName": "Test"
    }
  ]
}

输出JSON(获取预期输出)

{
  "patient" : {
    "dateOfBirth" : "19890101",
    "firstName" : "Test",
    "lastName" : "Test"
  }
}

但是,当患者不是作为数组而是单个对象出现时,则定义的jolt规范不再起作用。

输入JSON(JSON规范不适用于此输入)

{
  "patient": {
    "dateOfBirth": [
      "19890101",
      "19890101"
    ],
    "genderCode": "1",
    "firstName": "Test",
    "lastName": "Test"
  }
}

实际输出(不正确)

{
  "patient" : {
    "dateOfBirth" : [ "19890101", "19890101" ],
    "firstName" : "Test",
    "lastName" : "Test"
  }
}

预期产出

{
  "patient" : {
    "dateOfBirth" : "19890101",
    "firstName" : "Test",
    "lastName" : "Test"
  }
}

共有1个答案

归泽宇
2023-03-14

您可以通过使用modify-beta transform来确定< code>patient是否为数组。在本例中,我在转换中使用了firstElement函数。然后,使用条件逻辑,例如

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "isArray": ["=firstElement(@(1,patient))", "No"]
    }
  },
  {
    "operation": "shift",
    "spec": {
      "@(0,isArray)": {
        "No": { "@(2,patient)": "patient" },
        "*": { "@": "patient.&" }
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "*": "ONE"
      }
    }
  }
]

如果不需要属性“genderCode”,则添加额外的删除转换,例如

,
  {
    "operation": "remove",
    "spec": {
      "*": {
        "genderCode": ""
      }
    }
  }
 类似资料:
  • 我正在尝试用以下规格进行JOLT换班操作,这是不起作用的。不知道我犯了什么错误。在这种情况下需要帮助。输出JSON作为一个对象来代替Array,shift也不能按预期工作。

  • 我是尼菲的新手。我试图创建一个颠簸规范,但没有得到它。谁能帮帮我。 详细信息如下:流文件中的属性:详细信息,ID,名称,地址,状态 流文件看起来像:[{“to”:“xxx1”},{“to”:“xx2”}、{“to”:“xxx3”}和{“到”:“XXX”}] 预期以下输出: 我能够发展到这个。但是我不知道如何获取“详细信息”字段

  • 我正在尝试使用 JOLT 转换 JSON。此 JSON 由嵌套数组组成,我无法获得正确的转换。 这是原始的JSON。请注意,总会有一个带有单个对象的“结果”数组。此对象将始终包含一个“行”数组。我想要行数组中每个元素的字段。 这是我写的规范: 预期的 JSON 是: 然而,我的规范返回以下输出: 水平可能有问题。但是我想不出来。有人能帮忙吗?

  • 我正在尝试使用JOLT转换JSON。这个JSON由嵌套数组组成,我不能正确地转换它。有人能帮忙吗?谢了。 这是我写的规范。 我期待的JSON是: 然而,我得到了错误的输出。不知怎的,我的嵌套对象正在转换为列表。 我不知道出了什么问题。有人能帮忙吗?

  • 我正在尝试编写一个震动规范,用于在下面提到的预期输出中转换以下输入 输入: <代码>{"城市":"西雅图","州":"西澳","国家":"美国","日期":"10/20/2018","用户列表": [ { "名":"大卫","年龄":"22","性别":"M","公司":"好" }, { "名":"汤姆","年龄":"30","性别":"M","公司":"好" }, { "名":"安妮","年龄"

  • 尝试转换如下内容时,我为转换后的对象获取了一个空值: 对此: 这是我使用的规范: 这是我使用的代码: 我能够使用与上述相同的规范和代码成功转换以下输入: 那么,我需要做什么来转换员工对象数组呢?