我有以下JSON文件:
[
{'docType': 'custom',
'fields':
{
'general_info': None,
'power': 20,
'safety':
{
'boundingBox': [2.375,9.9,4.98,9.9,4.98,10.245,2.375,10.245],
'confidence': 0.69,
'page': 22,
'text': 'bla-bla-bla',
'type': 'string',
'valueString': 'bla-bla-bla'
},
'replacement':
{
'boundingBox': [2.505,2.51,2.54,2.51,2.54,3.425,2.505,3.425],
'confidence': 0.262,
'page': 7,
'text': 'bla-bla-bla',
'type': 'string',
'valueString': 'bla-bla-bla'
},
'document_id': 'x123'
}
}
]
我想遍历所有field
值并从嵌套字段中提取text
。预期结果如下:
{
'labels':
{
'general_info': None,
'power': 20,
'safety': 'bla-bla-bla',
'replacement': 'bla-bla-bla',
'document_id': 'x123'
}
}
我怎样才能弄平我的JSON文件并获得预期的结果?
这是我到目前为止尝试过的:
import json
json_object = json.load(raw_json)
fields = {}
for field in json_object:
for attribute, value in field.items():
fields[attribute] = value
fields_json = json.dumps(fields, indent = 4)
但是,我不知道如何递归地输入嵌套字段
答案 0 :(得分:1)
您可以编写一个递归函数。当值是字典时,它应该自行调用。
这是一个例子。
def flatten_fields(d):
out = {}
for k, v in d.items():
if isinstance(v, dict):
out[k] = flatten_fields(v)
elif k == 'text':
return v
elif isinstance(v, list):
continue
else:
out[k] = v
return out
要运行它,您可以迭代json_object
中的每个字典。上面只有一个示例,但这是方法:
labels = []
for d in json_object:
labels.append({'labels': flatten_fields(d.get('fields', {}))})
labels
# returns:
[{'labels': {'general_info': None,
'power': 20,
'safety': 'bla-bla-bla',
'replacement': 'bla-bla-bla',
'document_id': 'x123'}}]
答案 1 :(得分:1)
将其加载为python列表后,对其进行循环以进入名为dict
的{{1}}键,并在找到{{1 }},其类型为fields
,您必须对其进行循环并获取keys
为values
的内部值,然后仅获取值,而value
为父级{{1 }}
dict
key
答案 2 :(得分:1)
您应该使用递归来浏览字典。 我的解决方案是:
import json
with open('raw_json', 'r') as j:
d = json.load(j)
# print(d)
def dict_walker(obj ,key=None):
if isinstance(obj, dict):
for key in obj:
dict_walker(obj[key], key)
else:
print(key, ':', obj)
dict_walker(d)
OUT:
docType : custom
general_info : None
power : 20
boundingBox : [2.375, 9.9, 4.98, 9.9, 4.98, 10.245, 2.375, 10.245]
confidence : 0.69
page : 22
text : bla-bla-bla
type : string
valueString : bla-bla-bla
boundingBox : [2.505, 2.51, 2.54, 2.51, 2.54, 3.425, 2.505, 3.425]
confidence : 0.262
page : 7
text : bla-bla-bla
type : string
valueString : bla-bla-bla
document_id : x123