Python IJSON嵌套解析

时间:2019-10-15 18:22:36

标签: python json ijson

我有一个带有极其嵌套数据的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

0 个答案:

没有答案