9

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

>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'

我应该覆盖json编码器方法还是有其他方法?

输入数据并不像上面的例子那么简单,在每次请求时,它都可以更改为不同的数据结构。很难编写更改数据结构的函数。

4

3 回答 3

10

在您正在编码的对象中,使用空字符串而不是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
于 2012-07-10T10:04:32.157 回答
3

最好处理要编码的数据并将Nones 替换为空字符串。毕竟,这就是你想要的。

于 2012-07-10T10:05:05.203 回答
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'。所以这可以解决问题。

于 2016-05-06T19:07:24.593 回答