使用 JOLT 表示法将 JSON 转换为 JSON

问题描述 投票:0回答:1

输入JSON

[ {
  "lsid" : 617871,
  "data" : [ {
    "bar_absolute" : 29.263,
    "bar_trend" : 0.049,
    "ts" : 1727693443
  } ],
  "sensor_type" : 242,
  "data_structure_type" : 12
}, {
  "lsid" : 617872,
  "data" : [ {
    "temp_in" : 81.2,
    "ts" : 1727693443,
    "hum_in" : 38.8
  } ],
  "sensor_type" : 243,
  "data_structure_type" : 12
}, {
  "lsid" : 617874,
  "data" : [ {
    "rx_state" : 0,
    "moist_soil_2" : null,
    "wet_leaf_1" : 11.8,
    "ts" : 1727693443
  } ],
  "sensor_type" : 56,
  "data_structure_type" : 12
} ]

预期输出 JSON

{
  "Date" : "2024-09-30 11:02:01",
  "data" : [ {
    "code" : "bar_absolute",
    "value" : 29.263
  }, {
    "code" : "bar_trend",
    "value" : 0.049
  }, {
    "code" : "temp_in",
    "value" : 81.2
  }, {
    "code" : "dew_point_in",
    "value" : 53.2
  }, {
    "code" : "hum_in",
    "value" : 38.8
  },{
    "code" : "rx_state",
    "value" : 0
  }, {
    "code" : "moist_soil_2",
    "value" : null
  }, {
    "code" : "wet_leaf_1",
    "value" : 11.8
  }],
  "stationname" : "ABC Station"
}

规格

  1. JSON中的所有measure必须单独保存为key value 与预期输出中的对一样,尽管它属于哪个传感器,但输入 JSON 中可用的所有度量都应保存为单独的键值对,如预期输出中所示。
  2. 日期应该是转换为日期格式的“ts”列(unix 到日期格式的转换应该在震动中)。
  3. 车站名称是硬编码名称。
json apache-nifi jolt
1个回答
0
投票

试试这个

const myData = [
{
  lsid: 617871,
  data: [
    {
      bar_absolute: 29.263,
      bar_trend: 0.049,
      ts: 1727693443,
    },
  ],
  sensor_type: 242,
  data_structure_type: 12,
},
{
  lsid: 617872,
  data: [
    {
      temp_in: 81.2,
      ts: 1727693443,
      hum_in: 38.8,
    },
  ],
  sensor_type: 243,
  data_structure_type: 12,
},
{
  lsid: 617874,
  data: [
    {
      rx_state: 0,
      moist_soil_2: null,
      wet_leaf_1: 11.8,
      ts: 1727693443,
    },
  ],
  sensor_type: 56,
  data_structure_type: 12,
},

];

const getData = () => {
const allData = [];
myData.forEach((item) => {
  const requiredData = item.data[0];
  for (const [key, value] of Object.entries(requiredData)) {
    if (key !== "ts") {
      allData.push({ code: key, value: value });
    }
  }
});

return {
  Date: "", // logic to get date
  data: allData,
  stationname: "ABC Station", // Static station name
};

};

console.log(getData());
© www.soinside.com 2019 - 2024. All rights reserved.