【问题标题】:JSON conversion using JOLT使用 JOLT 进行 JSON 转换
【发布时间】:2020-08-30 00:38:17
【问题描述】:

我正在尝试使用 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"
    } ]
  }
}

]

【问题讨论】:

  • 谁能指导我

标签: jolt


【解决方案1】:

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

[

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

]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 2017-09-20
    • 2021-10-05
    • 1970-01-01
    • 2023-01-23
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多