我希望Python的None
在json中编码为空字符串怎么样?以下是json.dumps
的默认行为。
>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
我应该覆盖json编码器方法还是有其他方法吗?
谢谢!
修改
输入数据并不像上面的示例那么简单,在每个请求上都可以将其更改为不同的数据结构。很难编写一个改变数据结构的函数。
答案 0 :(得分:9)
在您要编码的对象中,使用空字符串而不是None
。
这是一个未经测试的函数,它遍历一系列嵌套字典,将所有None
值更改为''
。添加对列表和元组的支持留给读者练习。 :)
import copy
def scrub(x):
ret = copy.deepcopy(x)
# Handle dictionaries. Scrub all values
if isinstance(x, dict):
for k,v in ret.items():
ret[k] = scrub(v)
# Handle None
if x == None:
ret = ''
# Finished scrubbing
return ret
答案 1 :(得分:3)
最好处理要编码的数据,并用空字符串替换None
s。毕竟,这就是你想要的。
答案 2 :(得分:3)
这是一个稍微改进的版本,它也处理列表和元组:
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 is not of type u'string'
。所以这就解决了这个问题。