我有一个带有极其嵌套数据的JSON文件。 为了让您有个想法,这是我要提取的数据的一个示例,该示例基于ijson解析器前缀。
prefix=data.items.item.properties.name
prefix=data.items.item.relationships.layer1.items.item.uuid
prefix=data.items.item.relationships.layer1.items.item.properties.interest1
prefix=data.items.item.relationships.layer1.items.item.relationships.interest1.item.relationships.interest2.properties
缩进表示x的循环,其中x是项数。
我将需要执行约4000个数据项。
如果我获得所有更深层次的内容,请使用:
ijson.items(input_file, "data.items.item.relationships.layer1.items.item)
我无法将图层中的项目与基础实体相关联。
因此,我只剩下与每个基本实体打交道
"data.items.item"
因此,我的问题是:有没有一种方法可以嵌套ijson调用以在每个层中进行组织和迭代,或者更好的是,有没有一种更好的方法来提取所有这些数据?
迭代器释放出字典,如果不使用json.loads()重新加载字典,则无法将其重新读取为json,这似乎否定了迭代方法的目的,除非重新加载较小的json是可以接受的。 / p>
我正在尝试的代码在下面,错误是:
with open(payload, "rb") as input_file:
fullData = ijson.items(
# input_file, "data.items.item.relationships.layer1.items.item"
input_file,
"data.items.item",
)
for round_f in fullData:
item = ijson.items(io.BytesIO(round_f),"")
for i in item:
print(i)
TypeError: a bytes-like object is required, not 'dict'
#
Sample output table ( will be pandas DF)
Name | uuid | Interest1 | Interest2 |
Where:
name : data.items.item.properties.name
uuid : data.items.item.relationships.layer1.items.item.uuid
interest1 : data.items.item.relationships.layer1.items.item.properties.interest1
interst2 : data.items.item.relationships.layer1.items.item.relationships.interest1.item.relationships.interest2.properties
rows : repeated as many times as there are events of interest2 in interest1 for each uuid