Создать JSON с 2 большими наборами данных? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть 2 огромных набора чисел в столбцах 1 и 2 на листе Excel. Я хочу связать свой первый столбец со вторым столбцом, чтобы создать файл JSON, подобный этой ссылке здесь - https://github.com/python-visualization/folium/blob/master/examples/data/data3.json, что-то вроде

[{"0500000US33009": 51289.0, "0500000US38041": 46793.0, "0500000US38043": 39857.0}]

, если бы у меня были только числа 0500000US33009, 0500000US38041 и 0500000US38043 в столбце 1 и 51289.0, 46793.0 и 39857.0 в столбце 2. Как я могу это сделать и убедиться, что полученный JSON имеет кавычки вокруг «0500000US33009»?

Спасибо заранее!

1 Ответ

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

, если бы у меня были только числа ...

Далее предполагается, что первые два столбца были извлечены в файл CSV или TSV, например

0500000US33009,51289.0
0500000US38041,46793.0
0500000US38043,39857.0

С входными данными в этом формате, конечно, было бы очень легко использовать ваш любимый инструмент обработки текста для создания словаря JSON.

Если принять простой формат CSV, как указано выше, данные могут также может быть преобразован в словарь JSON с помощью вызова в следующих строках:

jq -Rn 'reduce inputs as $in ({}; 
  . + ($in|split(",")|{(.[0]): .[1] |  tonumber}))'

Используя jq 1.6 или более раннюю версию, это приведет к:

{
  "0500000US33009": 51289,
  "0500000US38041": 46793,
  "0500000US38043": 39857
}

Изменение формата Значения numeri c являются результатом преобразования в 64-битные числа IEEE 754, и их можно избежать, используя более новую версию jq. Используя текущую "основную" версию, результат будет:

{
  "0500000US33009": 51289.0,
  "0500000US38041": 46793.0,
  "0500000US38043": 39857.0
}

Так что, если вы застряли с jq 1.6 или более ранней версией и вам требуется явная десятичная точка, вы можете пропустить |tonumber в указанную выше программу и добавьте шаг постобработки, если и как требуется.

Несколько слов предостережения

  1. Приведенное выше решение jq предполагает отсутствие коллизий (один ключ имеющий более одного значения), или, скорее, что если есть какие-либо конфликты, то должна преобладать последняя пара ключ-значение.

  2. Если какое-либо из значений во втором столбце не может быть представлены с достаточной точностью в виде 64-битных чисел IEEE 754, тогда может потребоваться существенно другая стратегия.

  3. Если количество строк действительно очень велико (например, миллиарды), тогда Возможно, стоит пересмотреть мудрость создания единого огромного словаря JSON.

...