【发布时间】:2019-07-06 10:58:06
【问题描述】:
我有一个大的 JSON 文件(40 万行)。我正在尝试隔离以下内容:
政策-“描述”
策略项 - “用户”和“数据库值”
JSON 文件 - https://pastebin.com/hv8mLfgx
Pandas 的预期输出:https://imgur.com/a/FVcNGsZ
“Policy Items”之后的所有内容在整个文件中都以完全相同的方式重新迭代。我试过下面的代码来隔离“用户”。它似乎不起作用,我正在尝试将所有这些转储到 CSV 中。
Edit* 这是我尝试尝试的解决方案,但无法使其正常工作 - Deeply nested JSON response to 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:我有一些工作代码能够获取一些用户,但它不能获取所有用户。 25 个中只有 11 个。
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:这是最终的工作副本,但是我仍然没有复制所有 TABLE 数据。我设置了一个循环来简单地忽略所有内容。捕获所有内容,我会在 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))```
【问题讨论】:
-
我考虑过使用映射构建一些递归。我个人什至不知道从哪里开始,因为我是 Python 的初学者。任何建议或指导将不胜感激。
-
所以您想要将描述映射到用户的东西?并且策略只是一个大列表,您想对该列表中的每个字典执行该操作吗?
-
@aws_apprentice 是的,就是这样。描述实际上是一个“数据库”描述。我的目标是将描述映射到数据库,然后在所述数据库下列出用户。很抱歉最初的混乱
-
你能展示一个预期输出的小例子吗?谢谢
-
@ChrisLarson 我明白,这是较大 JSON 文件的 sn-p。当我剪掉它时没有意识到底部的错字
标签: python json pandas csv dataframe