** json可以表示以下三种类型的值。**? ? ?
1、简单值:可以在json中表示字符串、数值、布尔和null。
2、对象:对象作为一种复杂的数据类型,表示一组有序的键值对儿。
3、数组:数组也是一种复杂的数据类型,表示一组有序的值列表,可以通过数值索引来访问其中的值。
json不支持变量、函数或对象实例,它就是一种表示结构化数据的格式。
1)映射用冒号(“:”)表示。名称:值
2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2
3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}
4) 并列数据的集合(数组)用方括号(“[]”)表示。
[
{名称1:值,名称2:值2},
{名称1:值,名称2:值2}
]
5 )元素值可具有的类型:string, number, object, array, true, false, null
json数组
//json数组
var jsonList=[
{"str":"abc",
"intstr":1322323456,
"max":6753,
"time":"2012-10-19"},
{"str":"cde",
"intstr":782144556,
"max":15400,
"time":"2012-10-19"}
];
for(var i=0;i<jsonList.length;i++){
for(var key in jsonList[i]){
alert("key:"+key+",value:"+jsonList[i][key]); //key:time value:2012-10-19
}
}
循环弹出数组中的每个对象:
枚举对象和json对象的区别
json对象不用定义变量,末尾不用写分号,类似数组,具有length属性,且所有的属性名必须加双引号
//枚举对象:
var message1 ={
name:"dabao",
age:21,
sex:"男",
doing: function(){
return "唱歌"
}
};
console.log(message1.age); //21
//json对象
var message2={
"name" : "xiaobao",
"age":21,
"sex":"女",
"doing": function(){
return "看剧"
}
}
console.log(message2.name); // xiaobao
console.log(message2); //{name: "xiaobao", age: 21, sex: "女", doing: ƒ}
json数据格式
后台返回的数据格式,如果是对象, 直接使用 如果返回的是json字符串格式,需要进行转化为json对象
json对象有两个方法 stringify 和 parse
1. JSON.stringify()? 把js对象序列化成json字符串
? ? ?
var list=[
{name:"lifan",age:18},
{name:"lifan1",age:19},
{name:"lifan2",age:20},
{name:"lifan3",age:21}
]
var list1= JSON.stringify(list);
console.log(list1); /* [{"name":"lifan","age":18},{"name":"lifan1","age":19},
{"name":"lifan2","age":20},{"name":"lifan3","age":21}] */
在序列化js对象时,所有函数与原型成员都会有意忽略,
不体现在结果中,此外,值为undeined的任何属性也会被跳过。
var a1 ={
name:"qian",
age:35,
sex:"男" ,
tmp:undefined,
say:function(){
console.log(1);
}
};
var b1 = JSON.stringify(a1);
console.log(b1); //打印{"name":"qian","age":35,"sex":"男"} 省略了值为函数和undefined的属性
JSON.stringify(参数1,参数2)还接受两个参数,这两个参数用于指定不同方式序列化js对象,
参数一:函数或者数组;
参数二,截取的数据,表示是否在json字符串中保留 缩进
var b2=JSON.stringify (a1,["name","sex"]);
console.log(b2); //{"name":"qian","sex":"男"}
2.JSON.parse()或者 eval():json类型的字符串转化为json对象
JSON.parse( );
var list2=JSON.parse (list1);
console.log(list2); /* [{name: "lifan", age: 18},{name: "lifan1", age: 19},
{name: "lifan2", age: 20}, {name: "lifan3", age: 21}] */
虽然list2 与list 有相同的属性,但是他们是独立的,没有任何关系的对象
eval() :
函数可计算某个字符串,并执行其中的的 JavaScript 代码。
var list3=eval(list1);
console.log(list3); /* [{name: "lifan", age: 18},{name: "lifan1", age: 19},
{name: "lifan2", age: 20}, {name: "lifan3", age: 21}] */
遍历数组list4
var list4=[
{name:"lifan",age:18},
{name:"lifan1",age:19},
{name:"lifan2",age:20},
{name:"lifan3",age:21}
];
//遍历数组list4
for(var i= 0;i<list4.length;i++){
console.log(list4[i].name); //lifan lifan1 lifan2 lifan3
}
输出结果为:
lifan
lifan1
lifan2
lifan3
for in 的用法 。
for…in 语句用来遍历数组内的元素
for…in 语句用于对数组或者对象的属性进行循环操作。
for … in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
in 后边是一个集合
语法:
for (变量 in 对象)
{
在此执行代码
}
key 表示属性(键值), obj[key] 表示属性对应的值
var obj = {
A:666,
B:"Ray",
C:true,
D:function(){
console.log(5);
}
}
/*如果想遍历对象obj中的所有键值,一般是用以下方式*/
for(var key in obj){
console.log(key,obj[key]) ; //key 表示属性, obj[key] 表示属性对应的值
}
输出:
A 2
B Ray
C true
D function (){ console.log(5);}
var a=[1,2,3,4];
for(var key in a)
{
console.log(a[key]);
}
输出:
1
2
3
4