首先我们来看一下js中JSON格式的字符串
注意以下的写法不是js中JSON格式的字符串,它只是一个js的字符串。
我们看JSON语法中对于字符串的定义:
是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。下面我们来看一下在js中怎么把JSON格式的字符串转换成一个JS对象。(
推荐使用第二种方式具体原因请参看:http://www.json.org.cn/resource/json-in-javascript.htm
此外提一句使用这两种方式转换后的js对象,应该是“一个符合JSON数据格式的js对象”,也就是说它的属性是带着引号的,这只是我的一种猜测,因为如果JSON格式的字符串如下表示:
那么转换后的JS对象的属性必定要加上引号,因为js对象的属性不加引号只能使用字母,数字,下划线和$符号表示,使用其它符号属性就要加上引号了,所以说JS对象字面量表示法中属性加上引号是不会错的。另外如果JSON格式的字符串如上所示,那么转换后的js对象对f[name]取值就不能使用 jsObj4.f[name] 要用 jsObj4['f[name]'] ,因为有特殊字符,这点要注意了。对于我的猜测,读者要有异议,可以提给我。
我们再来看看在js中js对象与JSON格式字符串的转换。下面我准备了几组js对象加以说明:
<script type="text/javascript">
//(1) 这是一个js对象
var jsObj1 = {
name : "张三"
}
//(2)这是一个内部带有方法js对象。
var jsObj2 = {
name : "张三",func : function(){
alert("hello");
}
}
//(3)这是一个符合JSON数据格式的js对象
var jsonObj = {
"name" : "张三","age" : 10,"remark" : {"high" :170,"address" : "beijingshi"}
}
// js数组对象
var jsArray = [
{name : "张三"},{"age" : 10}
]
//(1) 这是一个js对象
var jsObj1 = {
name : "张三"
}
//(2)这是一个内部带有方法js对象。
var jsObj2 = {
name : "张三",func : function(){
alert("hello");
}
}
//(3)这是一个符合JSON数据格式的js对象
var jsonObj = {
"name" : "张三","age" : 10,"remark" : {"high" :170,"address" : "beijingshi"}
}
// js数组对象
var jsArray = [
{name : "张三"},{"age" : 10}
]
function testJson(){
var JSONstr1 = JSON.stringify(jsObj1);
var JSONstr2 = JSON.stringify(jsObj2);
var JSONstr3 = JSON.stringify(jsonObj);
var JSONstr4 = JSON.stringify(jsArray);
alert(JSONstr1);
alert(JSONstr2);
alert(JSONstr3);
alert(JSONstr4);
}
看一下弹框的内容:
(1) (2)
(3) (4)
其中 (1)、(3)、(4)的执行结果说明,JSON解析器的stringify()函数对于js对象是fou符合JSON格式是不加限定,都可以把js对象转换成JSON格式字符串。
(2)的执行结果说明,js对象中如果没有JSON表示的值(比如函数和undefined)将会被排除。