JSON 语法是 javascript 对象表示语法的子集。
数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
JSON 数据的书写格式是:名称/值对。
名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
"firstName":"John"
JSON 值可以是:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
null
JSON正常就是由对象和数组组成,对象使用对象的方法来进行操作。数组使用数组的方法来进行操作。
var ourcountry=[["北京市"],["上海市"],["合肥市","芜湖市","蚌埠市"]]; // 数组
alert(ourcountry[2][1]);
var status_process = {
" name5" : '闲置期',
"name1" : '播种期',
"name2" : '苗期',
"name3" : '生长期',
"name4" : '采收期'
}
alert(status_process["name5"]);
alert(status_process.name5);
// 两个都为:闲置期
所谓json字符串,是指该字符串变量的值与json的格式相同,但是不是json对象,比如:
var s1="{";
var s2 = " 'name5' : '闲置期', 'name1' : '播种期','name2' : '苗期','name3' : '生长期','name4' : '采收期'";
var s3="}";
var status_process=s1+s2+s3;
packJson = [
{"name":"zhang", "password":"123"},
{"name":"li", "password":"456"}
];
for(var p in packJson){//遍历json数组时,这么写p为索引,0,1
alert(packJson[p].name + " " + packJson[p].password);
}
// 或者
for(var i = 0; i < packJson.length; i++){
alert(packJson[i].name + " " + packJson[i].password);
}
1.定义
var josnArry=[];
2.添加
jsonArry.push(jsonObj);
3.删除
delete jsonArry[0];
splice(index,length):
4.循环访问数组
a.jquery
$.each(jsonArry,function(index,item){
var userId=item.userId;
});
b.一般方式
for(var i=0;i<jsonArry.length;i++)
{
var userId=jsonArry[i].userId;
}
c.特殊方法
for(var item in jsonArry)
{
var userId=jsonArry[item].userId;//注意:此处的item不是数组项,而是数组项的索引
}
myJson = {"name":"ji", "password":"123"};
for(var p in myJson){//遍历json对象的每个key/value对,p为key
alert(p + " " + myJson[p]);
}
var jsonStr = "{\"userId\":\"001\"}"; // json对象字符串
var jsonArryStr = "[{\"userId\":\"001\"},{\"userId\":\"002\"}]"; // json数组字符串
var jsonObj = JSON.parse(jsonStr); // 字符串转为json对象
var jsonArry = JSON.parse(jsonArryStr); // 字符串转为json数组
var jsonStr = JSON.stringify(jsonObj); // json对象转为字符串
var jsonArryStr=JSON.stringify(jsonArry);// json数组转为字符串
alert(jsonStr);
alert(jsonArryStr);
alert(jsonObj.userId);
alert(jsonArry[0]['userId']);
只有数组或者json数组才可以使用length方法。json对象使用length方法无效。
如果json对象的子元素是数组或者json数组,也可以使用length方法。可以用于遍历数据。
一、JSONObject和JSONArray的数据表示形式
JSONObject的数据是用 { } 来表示的,
例如: { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null }
而JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , ...... , { } ] 来表示
例如: [ { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" } , { "content" : null, "beginTime" : 1398873600000 "endTime" } ] ;
表示了包含2个JSONObject的JSONArray。
可以看到一个很明显的区别,一个最外面用的是 { } ,一个最外面用的是 [ ] ;
JavaScript解析JSON
**
解析json数组即对JSONArray的遍历
一、对于标准的json数组如:
var result=[{"flag":1,"macId":"2","mbId":0,"userName":"XXX"},{"flag":1,"macId":"1","mbId":1,"userName":"YYY"}];
进行遍历的时候,可以直接通过for循环遍历这个数组,有两种方法
1.
for (var i = 0; i < result.length; i++) {
//result[i]表示获得第i个json对象即JSONObject
//result[i]通过.字段名称即可获得指定字段的值
result[i].userName;
}
2.
for(var i in result){
//表示遍历数组,而i表示的是数组的下标值,
//result[i]表示获得第i个json对象即JSONObject
//result[i]通过.字段名称即可获得指定字段的值
result[i].userName;
}
二、对于不标准的json数组如:
var result={"datas":[{"flag":1,"macId":"2","mbId":0,"userName":"XXX"},{"flag":1,"macId":"1","mbId":1,"userName":"YYY"}]};
进行遍历之前得先解析出标准的json数组格式即[{},{}]
var data= result.datas;
1.
for (var i = 0; i < data.length; i++) {
//data[i]表示获得第i个json对象即JSONObject
//data[i]通过.字段名称即可获得指定字段的值
data[i].userName;
}
2.
for(var i in data){
//表示遍历数组,而i表示的是数组的下标值,
//data[i]表示获得第i个json对象即JSONObject
//data[i]通过.字段名称即可获得指定字段的值
data[i].userName;
}
**
注意点:eval()方法的作用
**
在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式:
1. 一种为使用eval()函数。
2. 使用Function对象来进行返回解析
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛