首页 > 解决方案 > 通过 JSON.parse() 解析 json 内容时出错

问题描述

我正在使用 django 的 json_script 模板标签从上下文视图中获取 json。

我收到这样的json

{{rules|json_script:"rules"}}

<script lang="javascript">
    const rules = JSON.parse($('#rules').text())
</script>

这是我收到的{{rules|json_script:"rules"}}

<script id="rules" type="application/json">{"id": 10, "string": "demo", "profile": "Alumno Demo", "license": "Licencia no facturable por usuario demo", "field": "codigo_usuario", "include": true, "order": 1, "uppercase_sensitive": false, "dateadded": "2020-05-11T08:06:35Z", "billable": false}</script>

但是当我尝试 JSON.parse 时,我收到了这个错误:

VM760:5 Uncaught SyntaxError: Unexpected token R in JSON at position 5

我究竟做错了什么?如果我复制脚本的内容,它似乎是一个正确的 json。

提前致谢!

标签: javascriptjsondjango

解决方案


实际上 $('#rules').text() 正在返回一个 jQuery n.fn.init 函数。

查看jQuery库的代码:

`var jQuery = function( selector, context ) {
   return new jQuery.fn.init( selector, context );
};`

如果无法在 DOM 上找到元素,它会返回一个空函数。

你可以做什么:

1 . 像这样使用基本的 javascript 方法 getElementsByTagName:

document.getElementsByTagName('script')

这将返回一个脚本元素数组,在您的情况下,您将获得 2 个元素,并且只需使用 text 属性来获取脚本标签内容。

JSON.parse(document.getElementsByTagName('script')[0].text)

2 . 您还可以在脚本中声明一个变量并像这样解析 JSON:

var stringifiedJson = {"id": 10, "string": "demo", "profile": "Alumno Demo", "license": "Licencia no facturable por usuario demo", "field": "codigo_usuario", "include": true, "order": 1, "uppercase_sensitive": false, "dateadded": "2020-05-11T08:06:35Z", "billable": false}; JSON.parse(stringifiedJson);


推荐阅读