JavaScript 将字符串转换为 JSON 的三种方法对比

作者:百宝袋

时间:2026-10-25

浏览:298

本文介绍了 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 的特殊实现

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章