3 回答

TA貢獻2019條經驗 獲得超9個贊
將其加載為 python 列表后,只需循環(huán)它以獲取dict調用的內部鍵fields并簡單地對其進行循環(huán)keys,values一旦找到value其類型,dict您就必須對其進行循環(huán)并獲取內部值,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'}}]
添加回答
舉報