#json #csv
#json #csv
Вопрос:
У меня есть около 100 файлов JSON, все с разными датами, и мне нужно объединить их в один файл CSV с заголовками «дата», «real_name», «текст».
В самом JSON нет дат, перечисленных в JSON, а real_name является вложенным. Я давно не работал с JSON и немного растерялся.
Базовая структура JSON выглядит более или менее так:
Имя файла: 2021-01-18.json
[
{
"client_msg_id": "xxxx",
"type": "message",
"text": "THIS IS THE TEXT I WANT TO PULL",
"user": "XXX",
"user_profile": {
"first_name": "XXX",
"real_name": "THIS IS THE NAME I WANT TO PULL",
"display_name": "XXX",
"is_restricted": false,
"is_ultra_restricted": false
},
"blocks": [
{
"type": "rich_text",
"block_id": "yf=A9",
}
]
}
]
До сих пор у меня
import glob
read_files = glob.glob("*.json")
output_list = []
all_items = []
for f in read_files:
with open(f, "rb") as infile:
output_list.append(json.load(infile))
data = {}
for obj in output_list[]
data['date'] = f
data['text'] = 'text'
data['real_name'] = 'real_name'
all_items.append(data)
Ответ №1:
После того, как вы прочитали объект JSON, просто индексируйте данные в словарях. Вам может понадобиться obj[0]['text']
и т. Д., Если ваши данные JSON действительно находятся в списке в каждом файле, но это кажется странным, и я предполагаю, что ваши данные были вставлены output_list
после того, как вы собрали данные. Итак, предполагая, что содержимое вашего файла точно такое, как показано ниже:
{
"client_msg_id": "xxxx",
"type": "message",
"text": "THIS IS THE TEXT I WANT TO PULL",
"user": "XXX",
"user_profile": {
"first_name": "XXX",
"real_name": "THIS IS THE NAME I WANT TO PULL",
"display_name": "XXX",
"is_restricted": false,
"is_ultra_restricted": false
},
"blocks": [
{
"type": "rich_text",
"block_id": "yf=A9",
}
]
}
test.py:
import json
import glob
from pathlib import Path
read_files = glob.glob("*.json")
output_list = []
all_items = []
for f in read_files:
with open(f, "rb") as infile:
output_list.append(json.load(infile))
data = {}
for obj in output_list:
data['date'] = Path(f).stem
data['text'] = obj['text']
data['real_name'] = obj['user_profile']['real_name']
all_items.append(data)
print(all_items)
Вывод:
[{'date': '2021-01-18', 'text': 'THIS IS THE TEXT I WANT TO PULL', 'real_name': 'THIS IS THE NAME I WANT TO PULL'}]