一、补充说明
说明1:这部分主要是以练习为主,以需求为导向。
明确1:键是字符串的形式,而值可以是数组、对象(通常是)、number、null、boolean类型
二、JSON格式的字符串转化为JSON对象
需求1:JSON格式对象({})字符串转化为JSON对象--最简单的形式(值是单层的,不涉及嵌套)
<script type="text/javascript">
var json='{"name":"张三","age":23}';//JSON格式字符串(对象形式)转化为JSON对象
alert(typeof json);
var obj=JSON.parse(json); //JS的内置对象---将字符串解析成JSON对象
alert(typeof obj);
alert(obj.name+"="+obj.age);
</script>
说明:JSON格式的字符串要求特别严格,即最外层是{},则此层元素必须是键值对的形式。
需求2:将JSON格式的字符串数组([])转化为JSON对象
<script type="text/javascript">
//(1)JSON字符串的数组
var str='[{"name":"zhangsan","age":21},{"name":"lisi","age":20}]';
//(2)解析完后返回的是一个数组,数组元素是JSON对象
var v=JSON.parse(str);
//(3)for in 循环通过角标取出JSON对象
for(i in v){
alert(v[i].name+":"+v[i].age);
}
</script>
说明:这里我显示的通过键名来获取值,并且采用了for in的循环模式。
注意:for in的出现本来是为了JSON对象,明确数组和JSON对象使用时i的含义。
需求3:将数组(非JSON)的字符串转化为JSON对象
<script type="text/javascript">
//说明:数组的字符串
var str2='["zhangsan","lisi"]';
//返回一个数组(对象),数组元素是字符串
var obj=JSON.parse(str2);
//通过角标索引直接取
alert(obj[0]+":"+obj[1]);//可以循环获取
</script>
说明:数组中的元素可以是对象(json形式)、number、boolean、null等。
需求4:将深层次结构的JSON对象(最外层{})的字符串转化为JSON对象
<script type="text/javascript">
var str = '{"username": "zhansan","age": 23,"test": [{"chinese": 100,"math": 80},{"physical": 90,"english": 70}]}';
var obj=JSON.parse(str);//字符串转换成JSON对象
//获取数据
for(key in obj){//获取JSON的每个键---JSON对象独有的遍历方式
var temp=obj[key];//获取当前的值对象--如果是string类型的,直接就可以输出
if((typeof temp)=="object"){ //关键(表示仍然还有层级关系)
for(j in temp){ //temp表示JSON数组(对象),用索引
var temp1=temp[j]; //只有通过索引才能获取数组中的内容
for(k in temp1){ //数组里面的每个元素是JSON对象
alert(k+":"+temp1[k]);
}
}
}else{
//单层遍历
alert(key+":"+temp);
}
}
//说明:在数据流传输流程中,json是文本,即以字符串的形式传递的,而JS操作的是JSON对象,JSON对象和JSON字符串之间的转换是关键
</script>
说明:好好体会,里面的信息很丰富
--------------------------------------------------------------------
三、JSON对象转化为JSON字符串
需求1:将上面的"JS对象"封装的数据转成"JSON字符串
var student={
"name":"Jane",
"age":"25",
"location":"China"
}
var str=JSON.stringify(student);//注意是这个方法
document.write(str);
//结果如下:{"name":"Lanny","age":"25","location":"China"}
需求2:将一个数组对象(关联数组)转成JSON字符串
var students = new Array() ;
students[0] = "Lanny";
students[1] = "dong"; //里面也可以换成其他形式的内容
students[2] = "I love you";
var str=JSON.stringify(students);
document.write(str)
//結果如下:["Lanny","dong","I love you"]
说明:
需求3:JS解析JSON对象(循环)
<script type="text/javascript">
var packJson = {
"name": "Liza",
"password": "123"
};
//遍历packJson 对象的每个key/value对,k为key
for (var k in packJson) {
alert(k+" " +packJson[k]);
}
</script>
需求4:解析JSON数组对象
<script type="text/javascript">
var packJson = [{
"name": "Liza",
"password": "123"
}, {
"name": "Mike",
"password": "456"
}];
//说明;for in循环是专注为JSON,也可以使用数组
for (var i in packJson) { //遍历数组[]时,i为索引
var temp=packJson[i];//获取第一个数组元素是JSON对象
for(j in temp){ //遍历JSON对象
alert(j+":"+temp[j]);
}
//alert(packJson[i].name + " " + packJson[i].password);//通过JSON对象的字段的这种方式也可获取值
}
</script>
需求5:Jquery将JSON字符串转换成JSON对象
<script type="text/javascript">
$(function(){
var str='[{"name":"zhangsan","age":21},{"name":"lisi","age":20}]';
var obj=$.parseJSON(str);
alert(obj[0].name);
});
</script>
未完待续。。。