Json解析
json格式:
{名称:值,....,名称:值}对象
[值,....,值 ] 数组(值可以是字符串,数值,对象或者数组,可以嵌套)
图解:
优点:
1. 比xml格式简单,更易于阅读,轻量,更容易解析
2. json是更好的数据交换格式,xml是更好的文档交换格式
3. json更易于机器阅读,使用简单的客户端库或自身支持的javaScript
4. json可被浏览器客户端支持
5. 可支持各种通用的数据结构,记录,列表,树等
6. 21种语言支持可生成和解析json格式
缺点:
1. 不可扩展
2. 语义性较差,显示不如xml直观
json解析实例:
1.要解析的json文件
1 { 2 "retcode": 200, 3 "data": [ 4 { 5 "id": 10000, 6 "title": "新闻", 7 "type": 1, 8 "des":"这是一条有内涵的新闻1111" 9 }, 10 { 11 "id": 10002, 12 "title": "专题", 13 "type": 10, 14 "des":"这是一条有内涵的新闻222222" 15 }, 16 { 17 "id": 10003, 18 "title": "组图2", 19 "type": 2, 20 "des":"这是一条有内涵的新闻333333" 21 }, 22 { 23 "id": 10006, 24 "title": "组图4", 25 "type": 2, 26 "des":"这是一条有内涵的新闻333333" 27 }, 28 { 29 "id": 10008, 30 "title": "组图5", 31 "type": 2, 32 "des":"这是一条有内涵的新闻333333" 33 }, 34 { 35 "id": 10003, 36 "title": "组图6", 37 "type": 2, 38 "des":"这是一条有内涵的新闻ddddd33" 39 }, 40 { 41 "id": 10003, 42 "title": "组图7", 43 "type": 2, 44 "des":"这是一条有内涵的新闻3ssss33333" 45 }, 46 { 47 "id": 10003, 48 "title": "组图8", 49 "type": 2, 50 "des":"这是一条有内涵的新闻33dddd33333" 51 }, 52 { 53 "id": 10004, 54 "title": "互动", 55 "type": 3, 56 "des":"这是一条有内涵的新闻444444" 57 } 58 ], 59 "header":"http://10.0.2.2:8080/aa.jpg" 60 }
2.文件解析(原生)
1 public static MyBean readJson(String s) { 2 //对象不要设置为空,一定要new出来 3 MyBean myBean = new MyBean(); 4 List<MyBean.DataBean> data1 = new ArrayList<>(); 5 try { 6 //读取json的根目录 7 JSONObject object = new JSONObject(s); 8 //解析retcode标签 9 int retcode = object.getInt("retcode"); 10 myBean.setRetcode(retcode); 11 //由于data是一个数组类型,里面包含多个对象,所以需要用集合解析data 12 JSONArray data =object.getJSONArray("data"); 13 //遍历,得到data里包含的每个对象 14 for (int i=0;i<data.length();i++){ 15 //每个对象值被存放在dataBean中,所以需要new一个dataBean对象 16 MyBean.DataBean dataBean = new MyBean.DataBean(); 17 //得到每一个data对象jsondata 18 JSONObject jsonData = (JSONObject) data.get(i); 19 //得到jsondata对象的每一个属性值 20 int id = jsonData.getInt("id"); 21 、 //将属性值设置到dataBean 22 dataBean.setId(id); 23 String title = jsonData.getString("title"); 24 dataBean.setTitle(title); 25 int type = jsonData.getInt("type"); 26 dataBean.setType(type); 27 String des = jsonData.getString("des"); 28 dataBean.setDes(des); 29 //将dataBean存放至集合中 30 data1.add(dataBean); 31 //设置myBean的data值 32 myBean.setData(data1); 33 Log.e("text101", "readJson:===== "+dataBean.toString()); 34 } 35 //解析header标签 36 String header = object.getString("header"); 37 myBean.setHeader(header); 38 return myBean; 39 } catch (JSONException e) { 40 e.printStackTrace(); 41 return null; 42 } 43 } 44 }
3.使用Gson解析 需要导包 compile 'com.google.code.gson:gson:2.2.4'
1 Gson gson = new Gson(); 2 //fromJson()方法用来实现将Json数据转换为相应的Java对象 (toJson()方法用来实现将java对象转换为相应的Json数据) 3 final MyBean myBean = gson.fromJson(s, MyBean.class); 4 List<MyBean.DataBean> list = myBean.getData();