【发布时间】:2014-08-11 19:12:58
【问题描述】:
有没有办法让 python 的 json.dumps '跳过'特定键,以便将某些值直接写入标签?
例如
data = {'a_number': 42, 'a_string': 'foo'}
data['a_json_encoded_object'] = '{"foo": "bar"}' #this is a string being read from the DB
dumped = json.dumps(data)
然后在一个html文件中,使用Django
<script>
var data = {{dumped}}
</script>
这会产生以下 html:
var data = {"a_json_encoded_object": "{\\"foo\\": \\"bar\\"}", "a_string": "foo", "a_number": 42}
但我想要的是:
var data = {"a_json_encoded_object": {"foo": "bar"}, "a_string": "foo", "a_number": 42}
有没有办法做到这一点? IE。告诉json.dumps:对于键'a_json_encoded_object',根本不要操作值,直接写到json后面"a_json_encoded_object":
如果没有,将 JSON 编码的字符串从数据库中获取到浏览器内存的最佳做法是什么?作为参考,现在我正在使用 JSON.parse,但它很乱。
【问题讨论】:
-
json模块不支持任何方式告诉它“我们已经为您序列化了这部分”。最接近的是json.JSONEncoder中的default方法,它必须返回一个要序列化的对象,而没有执行序列化本身的选项。可能有支持这种东西的第 3 方模块,但我不知道。我所知道的最好的选择是用json.loads解析'{"foo": "bar"}'部分,这样json.dumps就会重新序列化它,这可能很浪费。 -
谢谢。正如您所提到的,我希望会有一个自定义编码器。希望有人知道。正如你所说,json.loads 很浪费——我还不如坚持在客户端使用 JSON.parse,因为我已经有了它。
标签: python json django-templates