第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何展平嵌套 JSON 文件以檢索預(yù)期字段

如何展平嵌套 JSON 文件以檢索預(yù)期字段

我有以下 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從嵌套字段中提取。預(yù)期結(jié)果如下:{   'labels':     {       'general_info': None,       'power': 20,       'safety': 'bla-bla-bla',       'replacement': 'bla-bla-bla',       'document_id': 'x123'     } }如何扁平化 JSON 文件并獲得預(yù)期結(jié)果?這是我到目前為止所嘗試過的:import jsonjson_object = json.load(raw_json)fields = {}for field in json_object:    for attribute, value in field.items():        fields[attribute] = valuefields_json = json.dumps(fields, indent = 4)但是,我不知道如何遞歸進(jìn)入嵌套字段
查看完整描述

3 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

將其加載為 python 列表后,只需循環(huán)它以獲取dict調(diào)用的內(nèi)部鍵fields并簡(jiǎn)單地對(duì)其進(jìn)行循環(huán)keys,values一旦找到value其類型,dict您就必須對(duì)其進(jìn)行循環(huán)并獲取內(nèi)部值,key然后text僅獲取值并成為key父級(jí)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'}}


查看完整回答
反對(duì) 回復(fù) 2023-12-12
?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊

你應(yīng)該使用遞歸來遍歷字典。我的解決方案是:


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


查看完整回答
反對(duì) 回復(fù) 2023-12-12
?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以編寫一個(gè)遞歸函數(shù)。當(dāng)值是字典時(shí),它應(yīng)該調(diào)用自身。


這是一個(gè)例子。


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

要運(yùn)行它,您可以迭代json_object. 上面只有一個(gè)例子,但方法如下:


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'}}]


查看完整回答
反對(duì) 回復(fù) 2023-12-12
  • 3 回答
  • 0 關(guān)注
  • 244 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)