json.dumps-控制输出中的报价

时间:2018-12-18 12:12:39

标签: python json flask

我正在用Treant.js树构建Flask应用程序。 在this示例中,树形图采用了这样的数据

    lana = 
    {
        text: {name: "lana"},
        image: "static/images/lana.png",
        parent: malory
    }

那很好。我现在需要从Python对象重新创建

现在我有

d = {}
d["parent"] = "malory"
d["text"] = { 'name': "lana" }
d['image'] = 'static/images/stripe.png'
print json.dumps(d)

>>> {"text": {"name": "lana"}, "image": "static/images/stripe.png", "parent": "malory"}

此外,当我将其记录到浏览器的控制台中时,也会得到相同的结果。

这不起作用。所有键都有引号,似乎引起了问题。如何删除按键周围的引号。

2 个答案:

答案 0 :(得分:1)

问题不在于引号。而是关于数据到代码的转换。在客户端上,您需要具有有效的JavaScript代码才能执行。通常,代码是静态的,而其处理的数据则由服务器动态生成。此类数据通常以JSON对象的形式提供。 JSON看起来与JavaScript类似,但它不是JavaScript代码。但是,JavaScript支持使用JSON作为表示数据的本机方式。

示例:

<!-- your template -->
<script>
    var myVar = {{ my_flask_var|json }};
    console.log(myVar);
</script>

在上面的示例中,来自服务器的响应如下所示:

<!-- your template -->
<script>
    var myVar = {"foo": 42, "bar": "qux"};
    console.log(myVar);
</script>

但是,它是有效的JavaScript。

答案 1 :(得分:0)

我相信您可能会混淆JavaScript对象和JSON字符串。您的树库需要一个JavaScript对象。您需要将JSON字符串转换为一个。

在JSON中,键必须为字符串,并且JSON中的字符串为defined

  

零个或多个Unicode字符的序列,用双精度包装   引号,使用反斜杠转义符

因此,删除这些双引号将导致无效的JSON。 parse创建JavaScript对象所需要做的事情:

let s = '{"text": {"name": "lana"}, "image": "static/images/stripe.png", "parent": "malory"}';
let o = JSON.parse(s);