在前端开发中,字符串与 JSON 对象的相互转换是数据处理的核心场景(如 AJAX 接收后端字符串、本地存储数据解析等)。JSON 作为轻量级数据格式,其语法严格性与 JavaScript 对象字面量存在差异,这也是不同转换方法兼容性、安全性、性能差异的根源。
核心问题:eval()是 JavaScript 的全局函数,可执行任意字符串形式的代码,解析 JSON 时需用括号包裹以避免语法歧义(JSON 对象的{}会被解析为代码块而非对象)。
代码示例
function ConvertToJsonForJs() {
//var testJson = "{ name: '小强', age: 16 }";(支持)
//var testJson = "{ 'name': '小强', 'age': 16 }";(支持)
var testJson = '{ "name": "小强", "age": 16 }';
//testJson=eval(testJson);//错误的转换方式
testJson = eval("(" + testJson + ")");
alert(testJson.name);
}
关键说明:
核心特点:jQuery 提供的专用 JSON 解析方法,严格遵循 JSON 语法规范,容错性低但安全性高。
代码示例
function ConvertToJsonForJq() {
var testJson = '{ "name": "小强", "age": 16 }';
//不知道
//'{ name: "小强", age: 16 }' (name 没有使用双引号包裹)
//"{ 'name': "小强", 'age': 16 }"(name使用单引号)
testJson = $.parseJSON(testJson);
alert(testJson.name);
}
关键说明 核心原理:通过动态创建匿名函数,将 JSON 字符串作为函数返回值执行,本质与eval()类似但封装性更强。
var jsonStr = '{"userName": "tiu","userAge": 26,"isMale": true}';
var json = (new Function("return " + jsonStr))();
关键说明:
核心特点:ECMAScript 5 规范引入的原生 JSON 对象,包含JSON.parse()(字符串转对象)和JSON.stringify()(对象转字符串),是现代浏览器的最优选择。
var jsonStr = '{"userName": "tiu","userAge": 26,"isMale": true}';
var json = JSON.parse(jsonStr);
var str = JSON.stringify(json);
正在加载... ...