【问题标题】:JOLT transform flatten nested array with key value pairsJOLT 变换用键值对展平嵌套数组
【发布时间】:2018-10-25 00:47:25
【问题描述】:

我正在尝试转换以下 JSON

{
  "data": {
    "keyvalues": [
      {
        "key": "location",
        "value": "sydney, au"
      },
      {
        "key": "weather",
        "value": "sunny"
      }
    ]
  },
  "food": {
    "name": "AllFoods",
    "date": "2018-03-08T09:35:17-03:00",
    "count": 2,
    "food": [
      {
        "name": "chocolate",
        "date": "2018-03-08T12:59:58-03:00",
        "rating": "10",
        "data": null
      },
      {
        "name": "hot dog",
        "date": "2018-03-08T09:35:17-03:00",
        "rating": "7",
        "data": {
          "keyvalues": [
            {
              "key": "topping",
              "value": "mustard"
            },
            {
              "key": "BUN type",
              "value": "toasted"
            },
            {
              "key": "servings",
              "value": "2"
            }
          ]
        }
      }
    ]
  }
}

进入,像这样更简单的东西,使用 JOLT(在 NIFI 中)。将第一个顶级food 属性(name、date、count)带入header,然后将嵌套的food 数组向上拉,然后将food.data.keyvalues 展平为字典/哈希图。

{
  "header": {
    "location": "sydney, au",
    "weather": "sunny",
    "date": "2018-03-08",
    "count": 2
  },
  "foods": [
    {
      "name": "chocolate",
      "date": "2018-03-08T12:59:58-03:00",
      "rating": "10"
    },
    {
      "name": "hot dog",
      "date": "2018-03-08T09:35:17-03:00",
      "rating": "7",
      "topping": "mustard",
      "bun_type": "toasted",
      "servings": "2"
    }
  ]
}

我的第一个 data 部分正在工作,但我不确定如何处理嵌套的 food 元素。顶层food info 需要移动到header 部分,第二层food 数组需要展平data.keyvalues。

当前规范...(仅处理顶部data.keyvalues)

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "keyvalues": {
          "*": { "@value": "@key" }
        }
      }
    }
  }
]

【问题讨论】:

    标签: json jolt


    【解决方案1】:

    规格

    [
      {
        "operation": "shift",
        "spec": {
          "data": {
            "keyvalues": {
              "*": {
                "value": "header.@(1,key)"
              }
            }
          },
          "food": {
            "date": "header.date",
            "count": "header.count",
            "food": {
              "*": {
                "name": "foods[&1].name",
                "date": "foods[&1].date",
                "rating": "foods[&1].rating",
                "data": {
                  "keyvalues": {
                    "*": {
                      "value": "foods[&4].@(1,key)"
                    }
                  }
                }
              }
            }
          }
        }
      }
    ]
    

    【讨论】:

    • 谢谢米洛。我似乎还无法理解这个 DSL……需要进一步研究。
    猜你喜欢
    • 2023-03-09
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多