Преобразование данных из CSV в JSON с группировкой - PullRequest
0 голосов
/ 25 августа 2018

Пример данных CSV (верхняя строка - заголовок столбца, за которым следуют три строки данных);

floor,room,note1,note2,note3
floor1,room1,2people
floor2,room4,6people,projector
floor6,room5,20people,projector,phone

Мне нужен вывод в формате json, но сгруппированный по полу, как здесь;

floor
    room
    note1
    note2
    note3

    room
    note1
    note2
    note3

floor
    room
    note1
    note2
    note3

    room
    note1
    note2
    note3

Таким образом, все комнаты этажа1 находятся в своей собственной группе json, затем комнаты этажа2 и т. Д.

Пожалуйста, кто-нибудь может указать мне правильное направление с точки зрения того, на какие инструменты смотреть и какие конкретные функции, например, категории jq +.Я уже провел некоторые поиски и запутался в куче разных постов, касающихся csvtojson, jq и некоторых скриптов на python.В идеале я хотел бы включить решение в сценарий оболочки, а не в отдельную программу / язык (у меня есть опыт администратора sys, но не программиста).

Большое спасибо

1 Ответ

0 голосов
/ 26 августа 2018

Возможно, это поможет вам начать.

Используйте язык программирования, такой как Python, для преобразования данных CSV в структуру данных словаря, разделив их запятыми, и используйте библиотеку JSON, чтобы вывести свой словарь как JSON.

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

import json

csv = """floor1,room1,note1,note2,note3
floor1,room2,2people
floor1,room3,3people
floor2,room4,6people,projector
floor2,room5,3people,projector
floor3,room6,1person
"""

response = {}

for line in csv.splitlines():
    fields = line.split(",")
    floor, room, data = fields[0], fields[1], fields[2:]
    if floor not in response:
        response[floor] = {}
    response[floor][room] = data

print json.dumps(response)

Если вы затем запустите этот скрипт и передадите его в jq (где JQ просто используется для красивой печати вывода на вашем экране; в действительности это не требуется), вы увидите:

$ python test.py | jq . 
{
  "floor1": {
    "room2": [
      "2people"
    ],
    "room3": [
      "3people"
    ],
    "room1": [
      "note1",
      "note2",
      "note3"
    ]
  },
  "floor2": {
    "room4": [
      "6people",
      "projector"
    ],
    "room5": [
      "3people",
      "projector"
    ]
  },
  "floor3": {
    "room6": [
      "1person"
    ]
  }
}
...