Python:json如何将None转储为空字符串
我希望Python的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编码器方法还是有其他方法 谢谢 编辑 输入数据并不像上面的例子那样简单,在每个请求中它都可以被更改为不同的数据结构
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