簡體   English   中英

使用json解析空字符串

[英]parse empty string using json

我想知道是否有一種使用json.loads的方法來自動將空字符串轉換為其他值,例如None

例如,給定:

data = json.loads('{"foo":"5", "bar":""}')

我想擁有:

data = {"foo":"5", "bar":None}

代替:

data = {"foo":"5", "bar":""}

您可以使用字典理解:

data = json.loads('{"foo":"5", "bar":""}')
res = {k: v if v != '' else None for k, v in data.items()}

{'foo': '5', 'bar': None}

這只會處理嵌套字典的第一級。 您可以使用遞歸函數來處理更廣義的嵌套字典情況:

def updater(d, inval, outval):
    for k, v in d.items():
        if isinstance(v, dict):
            updater(d[k], inval, outval)
        else:
            if v == '':
                d[k] = None
    return d

data = json.loads('{"foo":"5", "bar":"", "nested": {"test": "", "test2": "5"}}')

res = updater(data, '', None)

{'foo': '5', 'bar': None,
 'nested': {'test': None, 'test2': '5'}}

您也可以使用json.loads object_hook參數來完成此object_hook 例如:

import json
import six


def empty_string2none(obj):
    for k, v in six.iteritems(obj):
        if v == '':
            obj[k] = None
    return obj


print(json.loads('{"foo":"5", "bar":"", "hello": {"world": ""}}',
                 object_hook=empty_string2none))

這將打印

{'foo': '5', 'bar': None, 'hello': {'world': None}}

這樣,您不需要其他遞歸。

我做了一些試驗和錯誤,並且無法使用json.loads()None解析為字符串,您將不得不像在本示例中一樣將json.loads() with json.dumps()使用:

import json

data = json.loads('{"foo":"5", "bar":"%r"}' %(None))
data2 = json.loads(json.dumps({'foo': 5, 'bar': None}))


if data2['bar'] is None:
    print('worked')
    print(data['bar'])
else:
    print('did not work')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM