У меня большой файл JSON (400 тыс. Строк).Я пытаюсь выделить следующее:
Политики- "описание"
элементы политики - "пользователи" и "значения базы данных"
ФАЙЛ JSON - https://pastebin.com/hv8mLfgx
Ожидаемый вывод от Pandas: https://imgur.com/a/FVcNGsZ
Все после «Элементы политики» повторяется точно так же по всему файлу.Я попробовал код ниже, чтобы изолировать «пользователей».Кажется, это не работает, я пытаюсь выгрузить все это в CSV.
Редактировать * здесь было решение, которое я пытался попробовать, но не смог заставить его работать правильно - Глубоко вложенный ответ JSON на pandas dataframe
from pandas.io.json import json_normalize as Jnormal
import json
import pprint, csv
import re
with open("Ranger_Policies_20190204_195010.json") as file:
jsonDF = json.load(file)
for item in jsonDF['policies'][0]['policyItems'][0]:
print ('{} - {} - {}'.format(jsonDF['users']))
РЕДАКТИРОВАТЬ 2: У меня есть некоторый рабочий код, который может захватить некоторые из пользователей, но он не всех их.Только 11 из 25.
from pandas.io.json import json_normalize as Jnormal
import json
import pprint, csv
import re
with open("Ranger_Policies_20190204_195010.json") as file:
jsonDF = json.load(file)
pNode = Jnormal(jsonDF['policies'][0]['policyItems'], record_path='users')
print(pNode.head(500))
РЕДАКТИРОВАТЬ 3: Это окончательная рабочая копия, однако я все еще не копирую все мои данные таблицы.Я установил цикл, чтобы просто игнорировать все.Захватите все, и я бы отсортировал его в Excel. У кого-нибудь есть идеи, почему я не могу записать все значения TABLE?
json_data = json.load(file)
with open("test.csv", 'w', newline='') as fd:
wr = csv.writer(fd)
wr.writerow(('Database name', 'Users', 'Description', 'Table'))
for policy in json_data['policies']:
desc = policy['description']
db_values = policy['resources']['database']['values']
db_tables = policy['resources']['table']['values']
for item in policy['policyItems']:
users = item['users']
for dbT in db_tables:
for user in users:
for db in db_values:
_ = wr.writerow((db, user, desc, dbT))```