javascript - 通过 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。
提前致谢!
解决方案
实际上 $('#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);
推荐阅读
- sql - 用 top 代替 limit
- spring - 用于使用列表访问 json 的 Spring 表达式语言 (SpEL)
- node.js - AES 128 ECB 解密 nodejs
- flutter - 直到版本 2.2 才支持设置文字
- android - 使用“info.hoang8f.widget.FButton”的问题
- javascript - 如何从json字符串中递归获取父ID
- magento2 - 如何在 magento 2 中为我的所有帐户页面设置相同的页面标题?
- jquery - HTML 表格嵌套选择器
- python - 如何从需要用户名和密码的网站获取授权承载来测试 API?
- objective-c - 在开始时声明时继续使用未声明的标识符