操作Json和Json数组的一些基本方法
对于json嵌套,只要记住符号“:”前是键,符号后是值大括号成对找,一层层剥开,就清楚了。 举个例子说明,如下:
从外到里看,例子中就是一个数组,数组里面是两个json格式的字符串。这样分析思路就清晰多了。
工作中需要取出name4的值,你们会怎么取呢?。
最初我都想过字符串截取,那时还不了解JSONArray,现在知道了,取出来也就相当容易了。
取出name4值过程步骤: 1,将以上字符串转换为JSONArray对象; 2,取出对象的第一项,JSONObject对象; 3,取出name1的值JSONObject对象; 4,取出name2的值JSONObject对象; 5,取出name4的值value2。
示例中json数组格式的字符串可以通过方法直接转换为JSONArray的格式:JSONArray.fromObject(String)
<pre name="code" class="java">JSONArray getJsonArray=JSONArray.fromObject(arrayStr);//将结果转换成JSONArray对象的形式 JSONObject getJsonObj = getJsonArray.getJSONObject(0);//获取json数组中的第一项 String result=getJsonObj.getJSONObject("name1").getJSONObject("name2").getJSONObject("name4");
</pre>
定义一个json对象
1、直接定义
1)、属性值为常量: var jsonObj={userId:'001'}; //字段可以不用也可用引号引起来,但字符串值必须用引号(单引号和双引号都行) 2)、属性值为Json对象: var jsonObj={id:{userId:'001',sex:'男'},id1:{userId:'002',sex:'女'}};
2、由字符串转换
var jsonStr="{\"userId\":\"001\"}";//字段和字符串值必须用双引号引起,单引号都不行 var jsonObj=JSON.parse(jsonStr);//字符串转json对象
3、由字符串转换
jsonObj.name='李明'; 或者:jsonObj['name']='李明'; 结果:{serId:"001",name:'李明'}
4、循环访问json对象属性
var jsonObj={id:{userId:'001',sex:'男'},id1:'002'};
for(var field in jsonObj) { alert(field);//依次输出Id和Id1; alert(jsonObj[field].userId) //针对第一次循环,输出:001【第一个属性值为json对象,要通过属性值的属性访问】 alert(jsonObj[field]);//针对第二次循环,输出:002【第二个属性值为简单常量,直接输出即可】 }
定义一个json数组
var josnArry=[];
1、添加json对象元素:
jsonArry.push(jsonObj);
2、删除元素
1)、delete jsonArry[0]; 删除指定位置元素。注意:不直接直接删除,而是用null项取代。数组长度不变 结果:[ null],此时jsonArry[0]的值为undefined,后续访问数组时要考虑删除后的元素的特殊情况 2)、splice(index,length): 删除指定位置开始指定个数的项和delete区别: 1、splice直接清空指定项,数组长度减小。而delete 只是用null项取代原有项 2、splice可以一次性删除多项。而delete职能删除一项
3、循环访问数组
1、Jquery方式 $.each(jsonArry,function(index,item){ var userId=item.userId; }); 2、一般js方法 for(var i=0;i<jsonArry.length;i++) { var userId=jsonArry[i].userId; } 3、特殊方法(类似方法2) for(var item in jsonArry) { var userId=jsonArry[item].userId;//注意:此处的item不是数组项,而是数组项的索引 }
字符串和json对象和json对象数组相互转换
var jsonStr="{\"userId\":\"001\"}";
var jsonArry="[{\"userId\":\"001\"},{\"userId\":\"002\"}]";
1、字符串转json对象或json对象数组
var jsonObj=JSON.parse(jsonStr);//将字符串转化成json对象 var jsonArry=JSON.parse(jsonArry);//将字符串转化成json对象数组
2、json对象或json对象数组转字符串
var jsonStr=JSON.stringify(jsonObj);// json对象转为字符串 var jsonArryStr=JSON.stringify(jsonArry);// json数组转为字符串
打印结果:
alert(jsonStr);
alert(jsonArryStr);
alert(jsonObj.userId);
alert(jsonArry[0]['userId']);
1,JSONObject
json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}
2,JSONArray
json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的
Json对象中添加的是键值对,JSONArray中添加的是Json对象
JSONObject Json = new JSONObject(); JSONArray JsonArray = new JSONArray(); Json.put("key", "value");//JSONObject对象中添加键值对 JsonArray.add(Json);//将JSONObject对象添加到Json数组中
总结:
JSONObject与Map
Map<String,String> strmap=new JSONObject();
Map map和json都是键值对,不同的是map中键值对中间用等号分开,json中键值对中间用冒号分开。其实json就是一种特殊形式的map。
只有数组或者json数组才可以使用length方法。json对象使用length方法无效。
如果json对象的子元素是数组或者json数组,也可以使用length方法。可以用于遍历数据。