【发布时间】:2018-10-19 10:11:54
【问题描述】:
我需要一些关于在 Python 中扩展标准 json.JSONEncoder 的帮助。
我有这样的对象:
temp = {
"a": "test/string",
"b": {
"b1": "one/more/string",
"b2": 666
},
"c": 123
}
我需要覆盖(扩展)str 的编码以将/ 替换为\/。
标准 json.dumps 将返回:
{"a":"test/string","b":{"b1":"one/more/string","b2":666},"c":123}
我需要得到:
{"a":"test\\/string","b":{"b1":"one\\/more\\/string","b2":666},"c":123}
甚至不要问我为什么需要这样做...我已经覆盖了 default() 方法,但是当我用我的子类调用 json.dumps 时它被忽略了
我的编码器类:
class RetardJSONEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, str):
return json.JSONEncoder.default(self, obj.replace("/", "\/"))
return json.JSONEncoder.default(self, obj)
【问题讨论】:
-
请分享您的代码,您现在拥有什么。发现错误会更容易。
-
我用代码更新了我的问题。用
json.dumps(obj, cls=RetardJSONEncoder)调用它 -
str 对象始终在内部进行编码,您无法覆盖它。
-
我建议您在真正需要它的读者方面解决这个问题。否则,您最终会得到自己的 JSON 库。
标签: python json regex python-3.x