如何从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

我有一个动态生成的页面,我想在其中使用静态JavaScript并将JSON字符串作为参数传递给它。我见过谷歌使用的这种方法(参见)

但是我应该如何从JavaScript读取JSON字符串呢

<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