在 JavaScript 开发中,很多开发者会混淆「JS 对象」和「JSON 对象」「JSON 字符串」,三者本质完全不同,也是转换的核心前提:
前端和后端进行数据交互(如 AJAX 请求、接口传参)时,只能传输字符串格式的数据,无法直接传输 JS 对象 / 数组。所以前端需要把 JS 对象转成 JSON 字符串传给后端,后端接收后解析;后端返回的 JSON 字符串,前端也需要转成 JS 对象才能进行数据渲染、遍历等操作,这就是 JSON 对象与 JSON 字符串相互转换的核心应用场景。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
var obj = new Object();
obj.Name = "八戒"
obj.Age = 500;
//通过字面量的形式来定义对象
var obj1 = { "Name": "八戒", "Age": "500" };
var arr = [{ "Name": "八戒", "Age": "500" }, { "Name": "八戒1", "Age": "1000" }];
//JSON格式:将json的字面量表示形式,当做字符串存放,则为json格式字符串
var str = '{ "Name": "八戒", "Age": "500" }';
var jsonstrarr = '[{ "Name": "八戒", "Age": "500" }, { "Name": "八戒1", "Age": "1000" }];';
//将json字符串转换成js对象(数组)
var resobj = JSON.parse(str);
alert(resobj.Name);
</script>
</head>
<body>
</body>
</html>
处理:引用一个 json2.js 文件,调用 JSON.stringify () 方法。例如:
var data = new Object();
var json_data = JSON.stringify(data);
PS:json2.js 这个文件在网上搜一下就能下载到。 补充知识点:
1. 处理:用 jQuery 的一个方法 $.parseJSON () 将 JSON 格式的数据转成 JS 对象。例如:
var json_data = $.getJSON();
var data = $.parseJSON(json_data);
(可用来成转换 js 数组) 补充知识点:
2. 将 json 转换成 js 对象的方法:
var json = eval('(' + result + ')');
通过上面这个表达式,就完成了将服务器端响应给客户端的 Json 格式的字符串解析成了一个 Json(格式的)对象,名称为 “json”,通过 “json.” 或者 “json []” 的方式便可进行数据访问。 补充知识点:
.NET Framework 4 在 System.Runtime.Serialization 中。利用 JavaScriptSerializer 类对数据进行序列化和反序列化示例:
//将param反序列列list集合
List<ApplyPart> _ApplyPart = new JavaScriptSerializer().Deserialize<List<ApplyPart>>(param);
补充知识点:
$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象
反过来,使用 serialize 系列方法:如:var fields = $("select, :radio").serializeArray();
反过来,使用 serialize 系列方法:如:var fields = $("select, :radio").serializeArray();补充说明:serializeArray() 是 jQuery 将表单元素值转换为「JS 数组对象」的方法,转换后可直接用JSON.stringify()转成 JSON 字符串提交后端,是表单传参的常用技巧。
JSON.parse(jsonstr); //可以将json字符串转换成json对象
JSON.stringify(jsonobj); //可以将json对象转换成json对符串
注:ie8 (兼容模式),ie7 和 ie6 没有 JSON 对象,需要引入 json.js 或 json2.js。补充优先级:该方式是现代前端开发的首选,优点是「原生底层实现、解析速度最快、语法严格、绝对安全」,无任何代码执行风险,兼容所有现代浏览器(Firefox,chrome,opera,safari,ie9,ie8 标准模式)。
eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号
注:ie8 (兼容模式),ie7 和 ie6 也可以使用 eval () 将字符串转为 JSON 对象,但不推荐这些方式,这种方式不安全 eval 会执行 json 串中的表达式。补充重点提醒:eval()是所有转换方式里的「兜底方案」,仅在无 jQuery、无 json2.js、兼容 IE6/7 的极端老旧项目中临时使用,生产环境严禁用于解析「不可信数据」(如后端接口返回值、用户输入数据)。
正在加载... ...