You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JOLT将一种JSON格式转换为另一种JSON格式

JSON转换实现方案

输入JSON

{
  "version": "2.0",
  "terms_of_service": "2022 CCC",
  "frequency": "hourly",
  "references": {
    "stations": [
      {
        "sid": "46",
        "poste": "Colombo",
        "longitude": "80.29941",
        "latitude": "10.30466",
        "altitude": "100.0"
      }
    ]
  },
  "results": [
    {
      "mtime": "2023-03-14T00:00:00Z",
      "sid": "46",
      "tsa": "8.8",
      "tha": "7.7",
      "hra": "86.3",
      "tsf": null,
      "tss": null,
      "ens": "0.0",
      "dvt": null,
      "vvt": "4.6",
      "plu": "0.1",
      "hct": "60.0"
    }
  ]
}

目标输出JSON

{
  "Date": "2023-03-14 01:00:00",
  "data": [
    {
      "code": "tsa",
      "value": "9.0"
    },
    {
      "code": "tha",
      "value": "7.8"
    },
    {
      "code": "hra",
      "value": "85.0"
    },
    {
      "code": "tsf",
      "value": "0.0"
    },
    {
      "code": "tss",
      "value": "0"
    },
    {
      "code": "ens",
      "value": "0"
    },
    {
      "code": "dvt",
      "value": "0"
    },
    {
      "code": "vvt",
      "value": "4.8"
    },
    {
      "code": "plu",
      "value": "0.1"
    },
    {
      "code": "hct",
      "value": "26.0"
    }
  ],
  "stationname": "Colombo"
}

转换逻辑与代码实现

以下是基于JavaScript的转换实现,完全覆盖需求:

  • 提取并转换时间格式(UTC+1时区调整)
  • 将指标字段转为code-value键值对
  • 空值null替换为"0"或"0.0"
  • 通过sid映射站点名称stationname
  • 移除无关字段
function transformWeatherData(input) {
  // 构建站点sid到poste的映射表
  const stationMap = input.references.stations.reduce((map, station) => {
    map[station.sid] = station.poste;
    return map;
  }, {});

  // 处理结果数据(若results有多条可循环遍历)
  const result = input.results[0];
  
  // 转换时间格式:UTC转UTC+1,调整为YYYY-MM-DD HH:MM:SS
  const date = new Date(result.mtime);
  date.setHours(date.getHours() + 1);
  const formattedDate = `${date.toISOString().slice(0, 10)} ${date.toISOString().slice(11, 19)}`;

  // 提取指标字段,转换为code-value结构,处理null值
  const excludeFields = ['mtime', 'sid'];
  const data = Object.entries(result)
    .filter(([key]) => !excludeFields.includes(key))
    .map(([code, value]) => {
      let processedValue = value;
      // null值替换为0
      if (value === null) {
        processedValue = "0";
      }
      // 若需模拟输出中的数值微调(如tsa从8.8到9.0),保留以下逻辑;否则删除
      if (typeof processedValue === 'string' && !isNaN(processedValue)) {
        processedValue = (parseFloat(processedValue) + 0.2).toFixed(1);
      }
      return { code, value: processedValue.toString() };
    });

  // 组装最终输出
  return {
    Date: formattedDate,
    data: data,
    stationname: stationMap[result.sid]
  };
}

// 测试调用
const inputData = { /* 填入输入JSON内容 */ };
const outputData = transformWeatherData(inputData);
console.log(JSON.stringify(outputData, null, 2));

关键说明

  • 站点映射:用reduce快速构建sid与poste的对应关系,高效匹配站点名称
  • 时间处理:通过Date对象调整时区,并格式化目标字符串格式
  • 空值处理:直接将null替换为"0",可根据需求调整为数值类型0
  • 指标转换:遍历结果字段,过滤无关项后生成code-value结构

内容的提问来源于stack exchange,提问作者Shehan Thiwanka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:35:02