JavaScript 将字符串转换为 JSON 的三种方法对比
本文介绍了 JavaScript 中将字符串转换为 JSON 对象的三种常见方式:eval 函数、new Function 构造函数以及全局 JSON 对象的 parse 方法。重点分析了各方法的实现原理、浏览器兼容性差异,并强调 JSON.parse 对格式规范的严格要求,指出属性名必须使用双引号,否则会导致解析失败。
JSON 标准引入背景
ECMA-262 标准在第三版(E3)中并未包含 JSON 概念,直到第五版(E5)才正式引入,其中包括全局 JSON 对象以及 Date 对象的 toJSON 方法。
基于 eval 的解析方式
第一种方法是使用 eval 进行解析,这被认为是最早期的实现方式。具体代码如下:
代码如下:
function strToJson(str){
var json = eval('(' + str + ')');
return json;
} 注意,在 str 字符串两侧必须加上小括号。
基于 Function 构造函数的解析
第二种方法是使用 new Function 构造函数,这种写法相对少见。示例如下:
代码如下:
function strToJson(str){
var json = (new Function("return " + str))();
return json;
} 基于 JSON.parse 的标准解析
第三种方法是利用全局 JSON 对象,具体实现如下:
代码如下:
function strToJson(str){
return JSON.parse(str);
} 目前 IE8(S)、Firefox 3.5+、Chrome 4、Safari 4 以及 Opera 10 等浏览器已支持该方法。相关参考资料包括:http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx 和 https://developer.mozilla.org/en/Using_JSON_in_Firefox。
使用 JSON.parse 时必须严格遵守 JSON 规范,例如属性名必须用引号包裹。示例如下:
代码如下:
var str = '{name:"jack"}';
var obj = JSON.parse(str); // --> parse error由于 name 属性未使用引号包裹,在所有浏览器中使用 JSON.parse 均会抛出异常并导致解析失败。相比之下,前两种方法对此类格式没有严格要求。
另见:Chrome 中 JSON.parse 的特殊实现
定制 Quill.js 主题样式:修改默认 CSS 与添加自定义类名
2026-11-04 11:21:35
混淆JS代码怎么在线反混淆并格式化阅读
2026-11-03 21:46:39
JS在线编辑器代码报错怎么调试?控制台使用技巧
2026-11-03 21:24:56
从 marked.js 旧版本升级到最新版:API 变更与迁移指南
2026-11-03 17:38:17
JS富文本编辑器Quill与代码编辑器CodeMirror的区别及应用场景
2026-11-03 16:52:09
