Python - 如何在JS中导出JSON

Vad*_*est 1 javascript python json jinja2

我想将python中的JSON字符串导出为JS变量.

<script type="text/javascript">
    var data = JSON.parse('{{ dataJSON }}');
    console.log(data)
</script>
Run Code Online (Sandbox Code Playgroud)

如果我打印的内容dataJSON我得到:[{"offset":0,"total":1,"units":[{"village_id":37,"village_name":"Glim

但在JS中我得到了这个: JSON.parse('[{&#34;offset&#34;:0,&#34;total&#34;:1,&#34;units&#34;:[{&#34;village_id&#34;:37

我使用jinja2模板引擎:http://jinja.pocoo.org/docs/dev/templates/#if

我该如何解决这个问题?

Mar*_*ers 5

您需要将数据标记为安全:

var data = {{ dataJSON|safe }};
Run Code Online (Sandbox Code Playgroud)

这可以防止它被HTML转义.没有必要这样使用JSON.parse(); JSON是一个有效的JavaScript子集(至少在Python json模块生成有效子集的情况下).

考虑到这不会使JavaScript安全.您可能想要调整JSON序列化.如果您使用的是Flask,tojson则会提供一个过滤器,以确保您获得JavaScript安全的有效JSON:

var data = {{ data|tojson|safe }};
Run Code Online (Sandbox Code Playgroud)

如果您没有使用Flask,请对JSON进行后处理:

dataJSON = (json.dumps(data)
    .replace(u'<', u'\\u003c')
    .replace(u'>', u'\\u003e')
    .replace(u'&', u'\\u0026')
    .replace(u"'", u'\\u0027'))
Run Code Online (Sandbox Code Playgroud)

这是Python代码,用于生成dataJSON可在HTML(包括属性值)和JavaScript中安全使用的值.这里归功于Flask json.htmlsafe_dumps()功能.