如何从JavaScript中读取脚本标记中的JSON?

Jon*_*nas 71 javascript json script-tag

我有一个动态生成的页面,我想使用静态JavaScript并将JSON字符串作为参数传递给它.我已经看到了Google使用的这种方法(请参阅Google的+1按钮:他们是如何做到的?).

但是我应该如何从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>
Run Code Online (Sandbox Code Playgroud)

在这个JavaScript中,我想使用{"org": 10, "items":["one","two"]}HTML文档中的JSON参数.我不知道用jQuery或不用它是否最好.

$(function() {
    // read JSON

    alert("the json is:")
})
Run Code Online (Sandbox Code Playgroud)

c-s*_*ile 138

我会将脚本声明更改为:

<script id="data" type="application/json">{"org": 10, "items":["one","two"]}</script>
Run Code Online (Sandbox Code Playgroud)

注意类型和id字段.之后

var data = JSON.parse(document.getElementById('data').innerHTML);
Run Code Online (Sandbox Code Playgroud)

将在所有浏览器中正常工作.

type="application/json"需要,以防止浏览器解析它,而加载.

  • @WoIIe因为TS已经使用了jQuery,所以请检查`<script src ="jquery-1.6.2.min.js"> </ script>`. (12认同)
  • 根据HTML5规范:http://dev.w3.org/html5/markup/script.html已定义SRC的`<script>`元素不应包含除新行和/或注释之外的任何内容.请参阅上面链接中的"具有src属性的脚本元素必须仅包含:".否则HTML验证者会抱怨. (4认同)
  • 注意这不安全,它允许XSS,https://codepen.io/anon/pen/xevgEM (2认同)

Jon*_*nas 13

我最终得到这个JavaScript代码独立于jQuery.

var json = document.getElementsByTagName('script');
var myObject = JSON.parse(json[json.length-1].textContent);
Run Code Online (Sandbox Code Playgroud)

  • 为什么不给脚本一个ID并用`document.getElementById`抓住它?这样,您不必记住保持最后.也不会有其他人在将来改变页面. (40认同)

小智 5

读取正在<script id="myJSON">使用的JSON

var manifest= document.getElementById('myJSON').innerHTML; //sets manifest to the text in #myJSON
manifest= JSON.parse(manifest) //Converts text into JSON
Run Code Online (Sandbox Code Playgroud)

您还可以使用方法来指向脚本,例如document.scripts[0]

var manifest= document.getElementById('myJSON').innerHTML; //sets manifest to the text in #myJSON
manifest= JSON.parse(manifest) //Converts text into JSON
Run Code Online (Sandbox Code Playgroud)
    //var manifest= JSON.parse(document.getElementById('myJSON').innerHTML); /*Shortend of 2&3*/
var manifest= document.getElementById('myJSON').innerHTML; //Gets text in #myJSON
manifest= JSON.parse(manifest) //Converts it into JSON
document.getElementById('test').innerHTML= manifest.name+ '<br/>'+ manifest.otherOptions; //Displays it
console.log('manifest')
console.log(manifest);
Run Code Online (Sandbox Code Playgroud)