参考:http://blog.youkuaiyun.com/yuzhangsir/article/details/76599940
一、什么是JSON?
1、JSON:JavaScript 对象表示法(JavaScript Object Notation)。
2、JSON 是存储和交换文本信息的语法。类似 XML。
3、JSON 比 XML 更小、更快,更易解析。
说白了,JSON就是一种数据交换格式
二、相对于xml的优势
XML 是一种纯文本格式,所以适合在网络上交换数据,但是 XML 格式比较复杂。
相对于xml,JSON更短,读写的速度更快,而且能够使用数组。
三、语法规则
(1)数据在名称/值对中
firstName : "John"
(2)数据由逗号分隔
(3)花括号保存对象
{ firstName:"John" , lastName:"Doe" }
(4)方括号保存数组,数组内可以包含多个对象
{ employees: [ { firstName:"John" , lastName:"Doe" }, { firstName:"Anna" , lastName:"Smith" }, { firstName:"Peter" , lastName:"Jones" } ] }
四、JSON支持的数据格式
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
五、注意事项
- JSON 规定字符集是UTF-8,字符串必须使用
""
,Object 的键也必须使用""
- 数组或对象的最后一个成员,不能加 逗号
- 注意要善于使用HiJSON来检测代码的正确性,路径:E:\HiJson 将要验证的json代码拷贝过去,点击格式化。
六、实例
{
versionName: "2.0",
versionDes: "新版本的描述信息",
versionCode: "2",
download: "http:localhost:3-13"
}
七、解析JSON
解析JSON一定要掌握两条规则
1.如果看到的是{},使用JSONObject
2.如果看到的是[],使用JSONArray
下面直接上案例
(1)纯对象的解析,用从服务器上拿下来的数据做案例
{
versionName: "2.0",
versionDes: "新版本的描述信息",
versionCode: "2",
download: "http:localhost:3-13"
}
//[6]通过工具类,将流转换成字符串
String json = StreamUtil.Stream2String(inputStream);
Log.i("json数据",json);
//[7]解析json
JSONObject jsonObject = new JSONObject(json);
//[8]挨个解析
String mVersionName = jsonObject.getString("versionName");
String mVersionDes = jsonObject.getString("versionDes");
String mVersionCode = jsonObject.getString("versionCode");
String mDownload = jsonObject.getString("download");
Log.i("数据",mVersionName);
Log.i("数据",mVersionCode);
Log.i("数据",mVersionDes);
Log.i("数据",mDownload);
(2)对象组合类型的解析
{
"love": {
"one": "sing",
"two": "read"
},
"name": "gx"
}
//[6]通过工具类,将流转换成字符串
String json = StreamUtil.Stream2String(inputStream);
Log.i("json数据",json);
//[7]解析json
JSONObject jsonObject = new JSONObject(json);
String name = jsonObject.getString("name");
//拿到json对象
JSONObject jsonObject1 = jsonObject.getJSONObject("love");
String one = jsonObject1.getString("one");
String two = jsonObject1.getString("two");
Log.i("数据",name);
Log.i("数据",one);
Log.i("数据",two);
(3)对象、数组 组合类型解析
{
name:"gx",
data:{
wendu:"20",
cast:[
{low:"19",date:"6日"},
{low:"11",date:"5日"}
]
}
}
//[6]通过工具类,将流转换成字符串
String json = StreamUtil.Stream2String(inputStream);
Log.i("json数据",json);
//[7]解析json
JSONObject jObject = new JSONObject(json);
String name = jObject.getString("name");
JSONObject jObject1 = jObject.getJSONObject("data");
String wendu = jObject1.getString("wendu");
JSONArray jArray = jObject1.getJSONArray("cast");
for(int i=0;i<jArray.length();i++){
JSONObject jObject2 = jArray.getJSONObject(i);
String low = jObject2.getString("low");
String date = jObject2.getString("date");
Log.i("数据",low);
Log.i("数据",date);
}
Log.i("数据",name);
Log.i("数据",wendu);