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

如何在Vega-Lite中适配OECD API的非标准JSON数据?

解决Vega-Lite调用OECD API的格式问题

你的核心问题在于OECD返回的SDMX-JSON结构需要额外处理:observations中的key是时间维度的索引值而非直接年份,且数值以数组形式存储。以下是修正后的配置,能正常解析并生成图表:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.2.json",
  "data": {
    "url": "https://stats.oecd.org/SDMX-JSON/data/REV/NES.TOTALTAX.TAXGDP.OAVG?contentType=json",
    "format": {"type": "json"}
  },
  "transform": [
    // 展开observations的键值对,将索引和数值数组拆分为字段
    {
      "type": "fold",
      "fold": {"expr": "keys(data('source_0').dataSets[0].series['0:0:0:0'].observations)"},
      "as": ["timeIndex", "valueArray"]
    },
    // 从structure中提取时间维度的年份标签
    {
      "calculate": "data('source_0').structure.dimensions.observation[0].values[parseInt(datum.timeIndex)].name",
      "as": "year"
    },
    // 提取数值数组中的有效数据,过滤空值
    {
      "calculate": "datum.valueArray[0]",
      "as": "Tax_revenue"
    },
    {"filter": "datum.Tax_revenue !== null"}
  ],
  "mark": "line",
  "encoding": {
    "x": {"field": "year", "type": "temporal", "title": "年份"},
    "y": {"field": "Tax_revenue", "type": "quantitative", "title": "税收收入占GDP比重"}
  }
}

关键修正点:

  • 不直接在format中指定property:保留完整JSON结构,才能读取structure里的时间维度映射关系。
  • fold转换键值对:将observations中的每个键值对拆成独立数据行,让时间索引和数值可被后续处理。
  • 映射实际年份:通过structure.dimensions.observation[0].values,把时间索引转换成真实年份标签。
  • 过滤空值:移除Tax_revenue为null的数据行,避免图表显示异常。

如果要使用你提供的另一个API链接(REVGBR),只需替换url字段即可,核心转换逻辑通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:50:27