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

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

限制用于日志記錄的項(xiàng)目數(shù)/json 的長(zhǎng)度

限制用于日志記錄的項(xiàng)目數(shù)/json 的長(zhǎng)度

寶慕林4294392 2022-08-02 18:29:35
我正在開發(fā)一個(gè)返回JSON的API。我正在記錄我的回復(fù),有時(shí)JSON只是荒謬地長(zhǎng),基本上堵塞了我的日志文件。有沒有一種簡(jiǎn)潔的方法來(lái)減少JSON的長(zhǎng)度,純粹是為了直觀地記錄數(shù)據(jù)?(在生產(chǎn)中不起作用)基本方法是將長(zhǎng)度為 5 的數(shù)組減少到 [前 2, “...”, 最后 2],將具有 4 個(gè)以上項(xiàng)的字典減少到 {前 4 個(gè), “...”: “...”}下面的代碼很丑陋。我知道它應(yīng)該是一個(gè)遞歸解決方案,以與任意深度的JSON相同的方式減少項(xiàng)目 - 它目前只對(duì)深度2這樣做。def log_reducer(response_log):original_response_log = response_logtry:    if type(response_log) == dict:        if len(response_log) >= 4:  # {123456}            response_log = dict(list(response_log.items())[:4])            response_log.update({"...": "..."})  # {1234...}        for key, value in response_log.items():            if type(value) == list:                if len(value) >= 5:  # {key:[123456]}                    new_item = value[:2] + ['...'] + value[-2:]  # {[12...56]}                    response_log.update({key: new_item})            if type(value) == dict:                if len(value) >= 4:  # {key:{123456}}                    reduced_dict = dict(list(value.items())[:4])                    reduced_dict.update({"...": "..."})                    response_log.update({key: reduced_dict})  # {{1234...}}
查看完整描述

2 回答

?
慕蓋茨4494581

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

這個(gè)答案使用了@calceamenta的想法,但實(shí)現(xiàn)了實(shí)際的削減邏輯:


def recursive_reduce(obj):

    if isinstance(obj, (float, str, int, bool, type(None))):

        return obj


    if isinstance(obj, dict):

        keys = list(sorted(obj))

        obj['...'] = '...'


        if len(keys) > 5:

            new_keys = keys[:2] + ["..."] + keys[-2:]

        else:

            new_keys = keys


        new_dict = {x:obj[x] for x in new_keys}

        for k, v in new_dict.items():

            new_dict[k] = recursive_reduce(v)


        return new_dict


    if isinstance(obj, list):

        if len(obj) > 5:

            new_list = obj[:2] + ["..."] + obj[-2:]

        else:

            new_list = obj


        for i, v in enumerate(new_list):

            new_list[i] = recursive_reduce(v)


        return new_list


    return str(obj)


test_json = {"works": [1, 2, 3, 4, 5, 6],

             "not_affected": [{"1": "1", "2": "2", "3": "3", "4": "4", "5": "5"}],

             "1": "1", "2": "2", "3": "3",

             "removed": "removed"

             }


print("original", test_json)

reduced_log = recursive_reduce(test_json)

print("reduced", reduced_log)

輸出:


original {'works': [1, 2, 3, 4, 5, 6], 'not_affected': [{'1': '1', '2': '2', '3': '3', '4': '4', '5': '5'}], '1': '1', '2': '2', '3': '3', 'removed': 'removed'}

reduced {'1': '1', '2': '2', '...': '...', 'removed': 'removed', 'works': [1, 2, '...', 5, 6]}

希望這有助于:)


查看完整回答
反對(duì) 回復(fù) 2022-08-02
?
尚方寶劍之說

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

您可以使用 def __str__(): 方法覆蓋 python 中字典和列表的字符串表示形式。使用它只是以遞歸方式調(diào)用所有元素上的 print 函數(shù)。它可以有一個(gè)簡(jiǎn)單的樣板,如下所示:


def custom_print(obj):

    log_str = ''

    if type(obj) == list:

        for item in obj:

            log_str += custom_print(item)

    elif type(obj) == dict:

        for k, item in obj.items():

            custom_print(item)

使用此自定義日志功能,按照日志文件格式打印到日志文件中。


查看完整回答
反對(duì) 回復(fù) 2022-08-02
  • 2 回答
  • 0 關(guān)注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報(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)