首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中编码json时将null转换为空字符串

如何在python中编码json时将null转换为空字符串
EN

Stack Overflow用户
提问于 2017-04-28 18:02:15
回答 2查看 3.1K关注 0票数 0

在后台django中,我会将数据作为json返回给前端,但是在前端有很多"null“值,一种解决方案是在创建值时修改代码,将值None转换为空字符串"”,但由于有很多地方,我想编写一个自定义的编码函数,在将obj转储为string时将None转换为"“。我使用了以下类,但它不起作用:

代码语言:javascript
复制
class PythonObjectEncoder(json.JSONEncoder):
    def encode(self, obj):
        if obj is None:
            obj = ''
        return json.JSONEncoder().encode(obj)

data = [1,2,3,None,
        [[[2],3],4]
        ]

j = json.dumps(data, cls=PythonObjectEncoder)
EN

回答 2

Stack Overflow用户

发布于 2017-04-28 19:51:41

要做到这一点,一种方法是预先过滤json对象。例如,使用这样的函数:

代码语言:javascript
复制
def fix_data(data):
    if type(data) is list:
        for i, e in enumerate(data):
            if e is None:
                data[i] = ''
            else:
                fix_data(e)

    elif type(data) is dict:
        for k, v in data.items():
            if v is None:
                data[k] = ''
            else:
                fix_data(v)

# Example:
data = ['1', None, '0', {'test' : None}]
fix_data(data)
print(data)
票数 1
EN

Stack Overflow用户

发布于 2017-04-28 21:22:56

不可能告诉json解码器类似以下内容:

请对这段数据进行编码,但将每次出现的None替换为空字符串,而不是null

原因是这个映射是在json.scanner中定义的,不能更改。

但是,如果您知道数据在json编码之前是什么样子的话。您可以在编码之前对它们进行预处理。下面是与您的示例匹配的一段代码:

代码语言:javascript
复制
import json

class CustomListEncoder(json.JSONEncoder):
    def encode(self, o):
        if not isinstance(o, list):
            raise TypeError("This encoder only handle lists")
        none_to_empty_str = map(lambda x: "" if x is None else x, o)
        return super().encode(list(none_to_empty_str))

json.dumps([1,2,None, [3, 4, 5]], cls=CustomListEncoder)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43677461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档