對於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方法。可以用於遍歷數據。
