Python:json如何转储无空字符串

时间:2012-07-10 10:02:22

标签: 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编码器方法还是有其他方法吗?

谢谢!

修改

输入数据并不像上面的示例那么简单,在每个请求上都可以将其更改为不同的数据结构。很难编写一个改变数据结构的函数。

3 个答案:

答案 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'。所以这就解决了这个问题。