将json字符串直接写入脚本标签

Posted

技术标签:

【中文标题】将json字符串直接写入脚本标签【英文标题】:Write a json string direct into the script tag 【发布时间】:2011-10-05 03:42:57 【问题描述】:

是否可以直接将json字符串写入script标签?

我的解决方案:

myJsonObject = jQuery.parseJSON(' *json string* '); 

stuffObject = myJsonObject.stuffObject;
delete  myJsonObject.stuffObject;

someObject = myJsonObject.someObject;
delete  myJsonObject.someObject;

但我认为它有点脏。是否有更好(更快)的解决方案?

谢谢!

【问题讨论】:

【参考方案1】:

所有 JSON 都是有效的 javascript(但并非总是相反)。

// These two lines are equivalent
var someObject =  a: 'a', b: 'b' ;
var someObject = jQuery.parseJSON(' "a": "a", "b": "b" ');

如果您从请求中获取 JSON 字符串到外部资源,我认为您目前正在做的是最好的方法。您可以将 JSON 插入到一个新的 script 元素中,如果您真的想要的话,就像这样:

var $body = $(document.body);
$body.append("<script type='text/javascript'>var myJsonObject = " + jsonString + ";</script>");

我个人认为这看起来不太干净,但这种方法还有一些其他问题。如果黑客能够将他/她自己的 javascript 放入您的网站返回的一些 JSON 响应中,那么有害的 javascript 将在您的网站上运行,可能会对您的网站造成严重破坏并使您感到尴尬。 (出于同样的原因,您不应该使用eval(jsonString)。)

其次,javascript 会创建一个全局变量(至少在这种情况下),并且不会在与当前运行的函数相同的范围内执行。

更不用说创建一个新的script 元素并将其插入到 DOM 中每次你想要解析一些 JSON 的不必要的费用。

你现在的做法很棒,因为 1)如果你的 JSON 字符串中有有害的 javascript,它会导致解析错误(JSON 只保存数据,不能执行命令)和 2)它会保留所有内容在当前范围内。

【讨论】:

以上是关于将json字符串直接写入脚本标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HTML 脚本标签中插入任意 JSON

JSON 序列化错误“字符 0 处的值无效

js实现格式化JSON数据方法

Json中dumpsloadsdumpload函数实例讲解

如何将波兰字符从 JSON 文件写入 JSON 文件? [复制]

使用 UTF-8 字符将 ObjectNode 写入 JSON 字符串以转义 ASCII