3 回答
TA贡献2019条经验 获得超9个赞
将其加载为 python 列表后,只需循环它以获取dict调用的内部键fields并简单地对其进行循环keys,values一旦找到value其类型,dict您就必须对其进行循环并获取内部值,key然后text仅获取值并成为key父级key
例子
from pprint import pprint
res = {}
for sub in content:
for x, y in sub['fields'].items():
if isinstance(y, dict):
for i, e in y.items():
if i == 'text':
res[x] = e
else:
res[x] = y
final = {}
final['label'] = res
pprint(final)
输出
{'label': {'document_id': 'x123',
'general_info': None,
'power': 20,
'replacement': 'bla-bla-bla',
'safety': 'bla-bla-bla'}}
TA贡献1824条经验 获得超5个赞
你应该使用递归来遍历字典。我的解决方案是:
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)
出去:
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
TA贡献1816条经验 获得超4个赞
您可以编写一个递归函数。当值是字典时,它应该调用自身。
这是一个例子。
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'}}]
添加回答
举报