1.json概述(json官网:http://www.json.org/json-zh.html)
1)json是一种轻量级的数据交换形式;
2)json构建于两种结构:
1."key:value"对的集合;
2.值的有序列表(a dense indexed sequence of valules);
3)结构:
jsonObject:{'key':value},相当与Java中Map<String, Object>
注意:key值只能为String
value值可以是 八中基本类型、JsonArray、object、null等;
4)JSON Vs XML
1.二者都具有相同的可读性;
2.二者都具有很多解析方法;
3.json相对xml来讲,体积较小;
4.json对数据的描述没有xml文件丰富;
5.json的传递速度较xml
2.android中提供对json的处理;
package:org.json
Classes
JSONArray A dense indexed sequence of values.
JSONObject A modifiable set of name/value mappings.
JSONStringer Implements toString() and toString().
JSONTokener Parses a JSON (RFC 4627) encoded string into the corresponding object.
Exceptions
JSONException Thrown to indicate a problem with the JSON API.
从API中可以明确得知,有处理数组的json、key-value Map映射的json
1)对于jsonArray,值得注意的一点就是 我可以将一个Collection集合转换成一个Array;
JSONArray(Collection copyFrom)
2)对于jsonObject,值得注意的一点就是 我可以讲一个Map<String, Obejct>转换成一个jsonObject;
JSONObject(Map copyFrom)
3)对于json文本解析类JsonTokener;
3.举例说明
String json = "{"
+ " \"query\": \"Pizza\", "
+ " \"locations\": [ 94043, 90210 ] "
+ "}";
Log.i("JsonActivity", "-------->json:"+json);
、、、、
private void testJsonToker(String json) {
JSONTokener tokener = new JSONTokener(json);
try {
JSONObject object = (JSONObject) tokener.nextValue();
Log.i("JsonActivity", "-------->object:"+object);
JSONArray nameArrays = object.names();
Log.i("JsonActivity", "-------->nameArrays:"+nameArrays);
Iterator<String>keyIter = object.keys();
for(;keyIter.hasNext();){
String val = keyIter.next();
Log.i("JsonActivity", "-------->val:"+val);
}
JSONArray valueArrays = object.toJSONArray(nameArrays);
Log.i("JsonActivity", "-------->valueArrays:"+valueArrays);
JSONObject object2 = object.accumulate("query", "mianpi");//query有映射
Log.i("JsonActivity", "-------->object2:"+object2);
JSONObject object22 = object.accumulate("query2", "jiaozi");//query没有映射
Log.i("JsonActivity", "-------->object22:"+object22);
JSONObject object3 = valueArrays.toJSONObject(nameArrays);
Log.i("JsonActivity", "-------->object3:"+object3);
JSONObject object4 = valueArrays.toJSONObject(new JSONArray("['one', 'two']"));
Log.i("JsonActivity", "-------->object4:"+object4);
//映射的key比value多
JSONObject object42 = valueArrays.toJSONObject(new JSONArray("['one', 'two', 'three']"));
Log.i("JsonActivity", "-------->object42:"+object42);
//映射的key比value少
JSONObject object43 = valueArrays.toJSONObject(new JSONArray("['one']"));
Log.i("JsonActivity", "-------->object43"+object43);
} catch (JSONException e) {
e.printStackTrace();
}
}
Log:
04-15 11:50:17.790: I/JsonActivity(27601): ——–>json:{ “query”: “Pizza”, “locations”: [ 94043, 90210 ] }
04-15 11:50:17.800: I/JsonActivity(27601): ——–>object:{“locations”:[94043,90210],”query”:”Pizza”}
04-15 11:50:17.800: I/JsonActivity(27601): ——–>nameArrays:[“locations”,”query”]
04-15 11:50:17.800: I/JsonActivity(27601): ——–>val:locations
04-15 11:50:17.800: I/JsonActivity(27601): ——–>val:query
04-15 11:50:17.800: I/JsonActivity(27601): ——–>valueArrays:[[94043,90210],”Pizza”]
04-15 11:50:17.800: I/JsonActivity(27601): ——–>object2:{“locations”:[94043,90210],”query”:[“Pizza”,”mianpi”]}
04-15 11:50:17.800: I/JsonActivity(27601): ——–>object22:{“locations”:[94043,90210],”query2”:”jiaozi”,”query”:[“Pizza”,”mianpi”]}
04-15 11:50:17.800: I/JsonActivity(27601): ——–>object3:{“locations”:[94043,90210],”query”:”Pizza”}
04-15 11:50:17.800: I/JsonActivity(27601): ——–>object4:{“two”:”Pizza”,”one”:[94043,90210]}
04-15 11:50:17.800: I/JsonActivity(27601): ——–>object42:{“two”:”Pizza”,”one”:[94043,90210]}
04-15 11:50:17.800: I/JsonActivity(27601): ——–>object43{“one”:[94043,90210]}
从Log分析可看出JsonObject和JsonArray之间的转换关系