假设我有一个特殊的对象,它可能包含一个文本json字符串,我打算将它用作更大json对象中的字段,作为文本值本身(而不是包含json的字符串)。在
我想写一个自定义编码器,可以完成这一点,即:
> encoder.encode({
> 'a': LiteralJson('{}')
> })
{"a": {}}
我不相信子类化JSONEncoder和重写default会起作用,因为最多只能返回字符串,这将导致结果{"a": "{}"}
。在
当LiteralJson嵌套在另一个字典中的某个地方时,重写encode似乎也不起作用。在
如果您感兴趣的话,其背景是我将JSON编码的值存储在一个缓存中,在我看来,一直反序列化然后重新序列化是一种浪费。它是这样工作的,但是其中一些值相当长,看起来像是一个巨大的浪费。在
下面的编码器可以完成我想要的(但似乎不必要的慢):
^{pr2}$
我刚意识到我最近得了一种病。答案建议使用替换令牌。在
使用自定义的
JSONEncoder
在内部使用随机UUID生成这些标记,可以或多或少地透明地集成这个逻辑。(我所说的“RawJavaScriptText
”相当于你的“LiteralJson
”。)然后可以直接使用
json.dumps(testvar, cls=RawJsJSONEncoder)
。在结果(使用Python 2.6和2.7):
^{pr2}$这是浪费,但只是万一有人在寻找一个快速的解决办法,这种方法运作良好。在
抄袭布鲁诺的例子:
结果:
^{pr2}$相关问题 更多 >
编程相关推荐