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

使用JOLT进行JSON转换

秦博达
2023-03-14

我正在尝试使用JOLT(使用NiFi JoltTransformJson处理器)将JSON转换为不同的格式。对于单个JSON记录,正在使用的JOLT在JOLT应用程序演示中运行良好,而如果我使用多个JSON记录执行,那么我在JOLT应用程序演示中没有得到预期的输出。有人能告诉我在JOLT规范中需要做哪些额外的更改来处理多个JSON记录吗?

示例输入json

[
  {
    "pool": {
      "field": [
        {
          "name": "BillingDay",
          "value": "12"
        },
        {
          "name": "Custom1",
          "value": "POOL_BASE_PLAN_3GB"
        }
     ]
    },
    "usage": {
      "version": "3",
      "quota": {
        "name": "POOL_TOP_UP_1GB_2",
        "cid": "5764888998010953848"
      }
    },
    "state": {
      "version": "1",
      "property": [
        {
          "name": "SMS_RO_TOP",
          "value": "1"
        },
        {
          "name": "BillingTimeStamp",
          "value": "2020-06-12T01:00:05"
        },
        {
          "name": "timereset",
          "value": "2020-01-12T00:35:53"
        }
      ]
    }
  },
  {
    "pool": {
      "field": [
        {
          "name": "PoolID",
          "value": "111100110000003505209"
        },
        {
          "name": "BillingDay",
          "value": "9"
        }
      ]
    },
    "usage": {
      "version": "3"
    },
    "state": {
      "version": "1",
      "property": [
        {
          "name": "BillingTimeStamp",
          "value": "2020-06-09T01:00:05"
        },
        {
          "name": "timereset",
          "value": "2019-03-20T17:10:38"
        }
      ]
    }
  }
]

JOLT使用:

[
{
    "operation": "modify-default-beta",
    "spec": {
      "state": {
        "property": {
          "name": "NOTAVAILABLE"
        }
      },
      "usage": {
        "quota": {
          "name": "NOTAVAILABLE"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "pool": {
        "field": {
           "*": {
            "value": "pool_item.@(1,name)"
          }
        }
      },
      // remaining elements print as it is
      "*": "&"
    }
    }

]

预期输出JSON:

[
  {
  "pool_item" : {
    "BillingDay" : "12",
    "Custom1" : "POOL_BASE_PLAN_3GB"    
  },
  "usage" : {
    "version" : "3",
    "quota" : {
      "name" : "POOL_TOP_UP_1GB_2",
      "cid" : "5764888998010953848"
    }
  },
  "state" : {
    "version" : "1",
    "property" : [ {
      "name" : "SMS_RO_TOP",
      "value" : "1"
    }, {
      "name" : "BillingTimeStamp",
      "value" : "2020-06-12T01:00:05"
    }, {
      "name" : "timereset",
      "value" : "2020-01-12T00:35:53"
    } ]
  }
},
{
  "pool_item" : {
    "BillingDay" : "9",
    "PoolID" : "111100110000003505209"    
  },
  "usage" : {
    "version" : "3",
    "quota" : {
      "name" : "NOTAVAILABLE"
    }
  },
  "state" : {
    "version" : "1",
    "property" : [ {
      "name" : "SMS_RO_TOP",
      "value" : "1"
    }, {
      "name" : "BillingTimeStamp",
      "value" : "2020-06-12T01:00:05"
    }, {
      "name" : "timereset",
      "value" : "2020-01-12T00:35:53"
    } ]
  }
}

]

共有1个答案

杨起运
2023-03-14

下面的jolt shift规范将适用于输入数组中的多个json。

[

  {
    "operation": "shift",
    "spec": {
      "*": {
        "pool": {
          "field": {
            "*": {
              "value": "[&4].pool_item.@(1,name)"
            }
          }
        },
        "usage": "[&1].usage",
        "state": "[&1].state"
      }
    }
    }

]
 类似资料:
  • 我正在尝试使用Jolt进行从顶级json数组到另一个数组的复杂转换。在每个项目中,我都有几个需要映射到另一个的对象。当它是简单的字符串时,我可以很容易地映射它们,但当它是关于对象到对象的时,我无法找到如何进行映射。在下面的示例中,我想从客户对象中提取数据。我想为其他几个人做这件事,比如地址和order_items这是我的输入: 这是规格文件 目前,我的输出是 我希望这样: 有人知道怎么做吗? 更新

  • 我需要在颠簸转换规范方面的帮助。以下是我到目前为止的工作。 输入: 使用的震动代码: 电流输出: 预期产出 当只使用单个json对象时,此代码工作正常。但是当我们使用具有相同id的多个项目时,它会开始对所有相关字段进行分组。

  • `我有以下输入json格式,需要转换以下json文件。我正在使用jolt转换,但无法使用https://jolt-demo.appspot.com/#inception网站正确格式化输出 `需要以下使用JOLT Iam的输出json格式,尝试使用JOLT转换进行转换

  • 我想转换这个JSON: 对此JSON: 我目前正在使用该规范,但它不适合我: 有人能给出一个规范吗?有没有关于jolt JSON的明确文档 ................................................................................................................................

  • 我想转换我的嵌套json消息,并使用Jolt规范只获取必需的文件- 我的输入JSON: 低于我的规格输出,这不是预期的- 我尝试了很多选择,但国籍不是我预期的输出。请在这里帮助颠簸转换

  • 我正在进行转换,在我将输入定义为数组之前,它工作正常。我当前的(工作!)示例是:INPUT 使用此JOLT规范: 输出是: 这很完美,但是:我真正期望的输入是这样的: 我需要这样的输出: 我将在每个数组对象中接收“trainerName”,但我只需要使用一个。 你能帮我找出解决办法吗?我正在寻找几种解决方案,但找不到适合此示例的解决方案。 非常感谢提前!贝斯!