Объединение JSON с массивом для создания нового файла - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь создать карту США с помощью 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 с «типом» (Многоугольник), «дугами» ( для отображения округа) и id, который является идентификатором округа.

Это замечательно и принято Mapbox Tilesets, чтобы дать мне визуализацию по округам, но мне нужно добавить среднюю стоимость дома по округам (чтобы получить цвета по округам, исходя из цены).

У меня есть второй файл json, который больше похож на массив, в котором есть

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

и так далее, но в основном он имеет ID -> медианную цену дома на округ. Идентификаторы этих двух файлов одинаковы и имеют одинаковое количество. Итак, мне нужно получить третий json файл из них, который имеет «тип», «дуги», «идентификатор», и «ЦЕНА» (дополнение).

Эти файлы огромны - есть предложения? Я попытался использовать jq, но получил сообщение об ошибке:

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

Заранее спасибо!

1 Ответ

2 голосов
/ 27 мая 2020

Самый простой подход - сохранить второй файл в переменной и использовать его в качестве ссылки при обновлении первого файла. Например:

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

add можно заменить на .[0], если массив в file2 содержит только один объект.

Онлайн-демонстрация

...