在后台django中,我会将数据作为json返回给前端,但是在前端有很多"null“值,一种解决方案是在创建值时修改代码,将值None转换为空字符串"”,但由于有很多地方,我想编写一个自定义的编码函数,在将obj转储为string时将None转换为"“。我使用了以下类,但它不起作用:
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)发布于 2017-04-28 19:51:41
要做到这一点,一种方法是预先过滤json对象。例如,使用这样的函数:
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)发布于 2017-04-28 21:22:56
不可能告诉json解码器类似以下内容:
请对这段数据进行编码,但将每次出现的
None替换为空字符串,而不是null。
原因是这个映射是在json.scanner中定义的,不能更改。
但是,如果您知道数据在json编码之前是什么样子的话。您可以在编码之前对它们进行预处理。下面是与您的示例匹配的一段代码:
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)https://stackoverflow.com/questions/43677461
复制相似问题