如何从JavaScript读取脚本标记中的JSON?
我有一个动态生成的页面,我想在其中使用静态JavaScript并将JSON字符串作为参数传递给它。我见过谷歌使用的这种方法(参见) 但是我应该如何从JavaScript读取JSON字符串呢如何从JavaScript读取脚本标记中的JSON?,javascript,json,Javascript,Json,我有一个动态生成的页面,我想在其中使用静态JavaScript并将JSON字符串作为参数传递给它。我见过谷歌使用的这种方法(参见) 但是我应该如何从JavaScript读取JSON字符串呢 <html> <head> <script src="jquery-1.6.2.min.js"></script> <script src="myscript.js">{"org": 10, "items":["one","two
<html>
<head>
<script src="jquery-1.6.2.min.js"></script>
<script src="myscript.js">{"org": 10, "items":["one","two"]}</script>
</head>
<body>
Hello
</body>
</html>
或者发明其他方法来识别脚本
您可能需要
.text()
而不是.html()
。不确定。两个都试试。我最终得到了独立于jQuery的JavaScript代码
var jsonElement = document.getElementById('json-script-tag');
var myObject = JSON.parse(jsonElement.textContent);
我将脚本声明更改为:
<script id="data" type="application/json">{"org": 10, "items":["one","two"]}</script>
在所有浏览器中都可以正常工作
需要使用type=“application/json”
来防止浏览器在加载时对其进行解析
我们之所以使用textContent
而不是innerHTML
或innerText
来读取原始Json文本,是因为innerHTML
试图将内容解析为HTML,这将导致性能降低,并可能导致解析错误和XSS攻击,而innerText
不会抓取原始文本,而是查找人类可见的文本,而textContent
会按原样抓取纯文本(这是您想要的)。有关为什么innerHTML
和innerText
不好的更多详细信息,请参阅。要在
中阅读JSON,请使用
var manifest= document.getElementById('myJSON').innerHTML; //sets manifest to the text in #myJSON
manifest= JSON.parse(manifest) //Converts text into JSON
您还可以使用方法指向脚本,如document.scripts[0]
//var manifest=JSON.parse(document.getElementById('myJSON').innerHTML)/*短端2和3*/
var manifest=document.getElementById('myJSON').innerHTML//获取#myJSON中的文本
manifest=JSON.parse(manifest)//将其转换为JSON
document.getElementById('test').innerHTML=manifest.name+'
'+manifest.otherOptions//显示它
console.log('manifest')
控制台日志(清单)代码>
{“名称”:“Web初学者工具包”,“其他选项”:“直接在此处”}
谢谢,当我将json更改为{“org”:10,“items”:[“one”,“two”]}
这个方法是错误的。如果一个
标记有src
,那么它就不能有任何内容。JSON只是脚本的一个参数。根据HTML5规范:定义了SRC的
元素除了新行和/或注释外不应包含任何内容。请参阅上面链接中的“具有src属性的脚本元素必须仅包含:”。否则HTML验证程序会抱怨。@WoIIe因为TS已经使用了jQuery,请检查那里的
。我喜欢jQuery的用法。我的意思是,使用普通javascript(在本例中)还可以减少多少毫秒?请注意,这是不安全的,它允许XSS,为什么不给脚本一个ID并用document.getElementById
获取它呢?这样,你就不必记得把它放在最后。其他人将来也不会更改页面。此答案的原始版本受问题中链接的启发,
标记还需要type=“application/json”
属性。
<script id="data" type="application/json">{"org": 10, "items":["one","two"]}</script>
var data = JSON.parse(document.getElementById('data').textContent);
var manifest= document.getElementById('myJSON').innerHTML; //sets manifest to the text in #myJSON
manifest= JSON.parse(manifest) //Converts text into JSON