Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:json如何将None转储为空字符串_Python_Json - Fatal编程技术网

Python:json如何将None转储为空字符串

Python:json如何将None转储为空字符串,python,json,Python,Json,我希望Python的None在json中被编码为空字符串,如何?下面是json.dumps的默认行为 >>> import json >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar": ["baz", null, 1.0, 2]}]' 我应该覆盖json编码器方法还是有其他方法 谢谢 编辑 输入数据并不像上面的例子那样简单,在每个请求中它都可以被更改为不同的数据结构

我希望Python的
None
在json中被编码为空字符串,如何?下面是
json.dumps
的默认行为

>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
我应该覆盖json编码器方法还是有其他方法

谢谢

编辑


输入数据并不像上面的例子那样简单,在每个请求中它都可以被更改为不同的数据结构。编写用于更改数据结构的函数很困难。

在要编码的对象中,使用空字符串而不是
None

这里有一个未经测试的函数,它遍历一系列嵌套字典,将所有
None
值更改为
'
。添加对列表和元组的支持留给读者作为练习。:)


最好处理要编码的数据,并用空字符串替换
None
s。毕竟,这是你想要的

这里有一个稍微改进的版本,它还处理列表和元组:

def scrub(x):
    # Converts None to empty string
    ret = copy.deepcopy(x)
    # Handle dictionaries, lits & tuples. Scrub all values
    if isinstance(x, dict):
        for k, v in ret.items():
            ret[k] = scrub(v)
    if isinstance(x, (list, tuple)):
        for k, v in enumerate(ret):
            ret[k] = scrub(v)
    # Handle None
    if x is None:
        ret = ''
    # Finished scrubbing
    return ret

我在使用
jsonschmea
模块时使用了它。它似乎无法处理
None
类型,并抛出:
jsonschema.exceptions.ValidationError:None不是类型u'string'
。这就解决了问题。

如果你想要真正的答案,那么你需要提供更好的理由……我的输入数据并不像上面的例子那么简单,因此,我希望通过
json.dumps
None
更改为空字符串;因此,在转换时请记住这一点。
None
的正确等价物是
null
@BurhanKhalid是的,你是对的,但我必须将此json数据发送到移动端,那里的Iphone和Android家伙在
null
方面有问题,因此,我将其转换为空字符串。需要注意的是,在代码中,
'
之间的差异是否显著,并且您希望返回数据;在返回的
'
是否确实是
'
或是否打算再次转换回
之间,您可能存在一些模糊性。。。
def scrub(x):
    # Converts None to empty string
    ret = copy.deepcopy(x)
    # Handle dictionaries, lits & tuples. Scrub all values
    if isinstance(x, dict):
        for k, v in ret.items():
            ret[k] = scrub(v)
    if isinstance(x, (list, tuple)):
        for k, v in enumerate(ret):
            ret[k] = scrub(v)
    # Handle None
    if x is None:
        ret = ''
    # Finished scrubbing
    return ret