【问题标题】:Merging JSON with array to create new file将 JSON 与数组合并以创建新文件
【发布时间】:2020-05-27 05:10:23
【问题描述】:

我正在尝试使用 Mapbox 制作一张美国地图,按县显示房价中位数。我有一个包含所有县的 .json 文件,并且已经被 Mapbox 瓦片集接受 -

{
  "type": "Topology",
  "transform": {
    "scale": [
      0.035896170617061705,
      0.005347309530953095
    ],
    "translate": [
      -179.14734,
      17.884813
    ]
  },
  "objects": {
    "us_counties_20m": {
      "type": "GeometryCollection",
      "geometries": [
        {
          "type": "Polygon",
          "arcs": [],
          "id": "0500000US01001"
        },
        {
          "type": "Polygon",
          "arcs": [],
          "id": "0500000US01009"
        },
        {
          "type": "Polygon",
          "arcs": [],
          "id": "0500000US01017"
        },
        {
          "type": "Polygon",
          "arcs": [],
          "id": "0500000US01021"
        }
      ]
    }
  }
}

基本上,它是一个 json 文件,其中包含“type”(多边形)、“arcs”(用于映射县)和“id”,它是县的 ID。

这很好,并且被 Mapbox Tilesets 接受,为我提供按县的可视化,但我需要按县添加房价中位数(以便根据价格按县获得颜色)。

我有第二个 json 文件,它更像一个数组,它有

[
  {
    "0500000US01001": 51289.0,
    "0500000US01009": 46793.0,
    "0500000US01017": 39857.0,
    "0500000US01021": 48859.0
  }
]

等等,但基本上它有 ID -> 每个县的房价中位数。 这两个文件的 ID 相同,数量相同。 所以我需要从中获取第三个 json 文件,它有“type”、“arcs”、“id”和“价格”(加法)。

这些文件很大 - 有什么建议吗?我尝试使用 jq 但收到一个错误

jq: error ... object ({"type":"To...) and array ([{"0500000U...) cannot be multiplied

提前致谢!

【问题讨论】:

标签: json dictionary join mapbox jq


【解决方案1】:

一种直接的方法是将第二个文件保存到一个变量中,并在更新第一个文件时将其用作参考。例如:

jq 'add as $prices | input
| .objects.us_counties_20m.geometries[] |= . + {PRICE: $prices[.id]}' file2 file1

如果file2 中的数组只包含一个对象,则add 可以替换为.[0]

Online demo

【讨论】:

  • 哇!这真太了不起了。感谢您也包含在线演示 - 这真的很有帮助。我使用了上面的代码,我得到了我想要显示的内容。我现在要将该代码复制粘贴到一个新的 JSON 中 - 非常感谢!
  • @Galen 只是将 JQ 的输出重定向到一个文件,例如 jq '...' file2 file1 > file3
  • Mapbox 似乎有一个小问题 - 我希望我的数据是这样的,带有“属性”部分:docs.mapbox.com/help/demos/choropleth-studio-gl/… 有没有办法将我的新文件 3 操作成一些东西像这样,带有“属性”? docs.mapbox.com/help/tutorials/choropleth-studio-gl-pt-1
  • 例如,上面的 choropleth json 文件中的“properties”是“name”和“density”,因为它们被分组在“properties”中,所以 mapbox 选择了它们。我希望我的“属性”包含 file2 中的数据(价格)。
  • 在将file2 和file1 连接在一起时,是否可以将file2 的PRICE 放入另一个字典中?例如,我将拥有“properties”:{“PRICE”:12345},而不只是“PRICE”。可以在您之前接受的答案之前或之后完成 PRICE 的“包装”吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 2012-05-28
  • 2018-08-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多