首页 > 解决方案 > JSON 的 JOLT 转换最初来自 Protobuf 格式

问题描述

我已从 protobuf 协议转换为以下格式的 json:

{
  "id": "6aa0734f-6d6a-4b95-8a2b-2dde346f9df7",
  "measurements": [
    {
      "ts": "1590331111510000000",
      "values": [
        {},
        {
          "name": 1,
          "value": -1.8093990087509155
        },
        {
          "name": 2,
          "value": 0.35456427931785583
        }
      ],
      "parameters": [
        "Stat",
        "VoltageAnglePhaseB"
      ]
    }
  ]
}

预期输出是:

    {
      "id" : "6aa0734f-6d6a-4b95-8a2b-2dde346f9df7",
      "ts" : "1590331111510000000",
      "Stat":-1.8093990087509155,
      "VoltageAnglePhaseB":0.35456427931785583
    }


我已经像这样开始了我的 Jolt 规范:

    [
  {
    "operation": "shift",
    "spec": {
      "id": "id",
      "measurements": {
        "*": {
          "ts": "ts",
          "parameters": {
            "*": ""
          },
          "*": ""
        }
      }
    }
    }


    ]

但是面临从 JSON 中提取名称和值的问题。

有人有想法吗?

标签: jsonprotocol-buffersjolt

解决方案


可以通过 2 个班次操作来完成。首先,将值转移到 valuesArr,同样的方式将参数转移到 parametersArr。然后将值与索引匹配。

[
  {
    "operation": "shift",
    "spec": {
      "id": "id",
      "measurements": {
        "*": {
          "ts": "ts",
          "values": {
            "*": {
              "value": "valuesArr"
            }
          },
          "parameters": "parametersArr"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "id": "id",
      "ts": "ts",
      "valuesArr": {
        "*": "@(2,parametersArr[&])"
      }
    }
  }
]

推荐阅读