json.dumps'跳过'具体的关键?

时间:2014-06-21 00:50:00

标签: python json django-templates

有没有办法让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}

有办法吗? 即告诉json.dumps:对于键'a_json_encoded_object',不要操纵该值,并在“a_json_encoded_object”之后直接将其写入json:

如果没有,将DB中的JSON编码字符串转换为浏览器内存的最佳做法是什么?作为参考,我现在正在使用JSON.parse,但它很混乱。

1 个答案:

答案 0 :(得分:2)

好的,所以你想要达到的是

的效果
data['a_json_encoded_object'] = {"foo": "bar"}

你有字符串

'{"foo": "bar"}'

来自数据库。

只需使用json.loads将字符串转换回Python字典

即可
>>> json.loads('{"foo": "bar"}')
{u'foo': u'bar'}

所以

data['a_json_encoded_object'] = json.loads('{"foo": "bar"}')

相同
data['a_json_encoded_object'] = {"foo": "bar"}

在你的Django模板中

<script>
     var data = {{ dumped|safe }}  // Mark as safe so quotations won't be escaped
</script>

呈现

var data = {"a_json_encoded_object": {"foo": "bar"}, "a_string": "foo", "a_number": 42}