Android开发中,与服务器交互80%是通过JSON方式传输数据,JSON也是基于纯文本的数据格式,JSON具有跨平台的优势,相对XML,JSON解析起来更方便,简单,解析数据所消耗的流量也会比XML少,而且JSON有一些好的第三方库文件,已为开发者封装好了。JSON语法规则:数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JSON 名称/值对JSON 数据的书写格式是:名称/值对名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:比如;"firstName":"John"JSON 值JSON 值可以是:数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 false)数组(在方括号中)对象(在花括号中)null比如值是基本类型[java] view plaincopy{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}{}代表是一个对象,这些都是简单的key/value形式,如果用对象来表示的话:[java] view plaincopypublic class Info {public String city;public String street;public int postcode;}在这个JavaBean中并没有使用get,set方法,因为get,set方法是使用反射做的,比较慢,这是JSON最简单的方式,key/value形式,我们知道json有三种方式,一种是key/value,key/Object,key/array,现在讲讲key/Object形式:比如:[java] view plaincopy{"name":"Michael","address":{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}}这里有2个对象,一个是最外面的,一个是address:它也是一个对象,我们说了{}就代表一个对象,因此 首先写里面的对象,然后再写外面的对象,代码如下:Info.java[java] view plaincopypackage com.jackie.json;public class Info {public String city;public String street;public int postcode;}Person.java[java] view plaincopy/*** {"name":"Michael","address":{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}}* @author carpool**/public class Person {public String name;public Info info;}JSON解析代码:[java] view plaincopy</pre><pre class="java" name="code">String jsonString = getJsonString();try {JSONObject jb = new JSONObject(jsonString); //最先解析最外层的{}Person p = new Person();Info info = new Info();info.city = jb.getJSONObject("address").getString("city");info.street = jb.getJSONObject("address").getString("street");info.postcode = jb.getJSONObject("address").getInt("postcode");p.info = info;p.name = jb.getString("name");} catch (JSONException e) {e.printStackTrace();}现在还剩下一个种形式JSON,就是key/array,比如:[java] view plaincopy{"people": [{"firstName": "Brett","lastName": "McLaughlin","email": "aaaa"},{"firstName": "Jason","lastName": "Hunter","email": "bbbb"},{"firstName": "Elliotte","lastName": "Harold","email": "cccc"}]}我们知道{}代表的是一个对象,[]代表的是数组,表示数组中存放了很多对象,对象之间用逗号(,)分开,这个用对象封装一般有二种形式,一是直接用集合把解析的对象存储起来,二是用一个类封装一个集合,集合的对象就是上面所解析的对象即可第一种方式:People.java[java] view plaincopypublic class People {public String firstName;public String lastName;public String email;}解析:[java] view plaincopyString jsonString = getJsonString(); //JSON串try {JSONObject jb = new JSONObject(jsonString); //最先解析最外层的{}JSONArray ja = jb.getJSONArray("people");ArrayList<People> ps = new ArrayList<People>();for(int i = 0; i < ja.length(); i++){People p = new People();p.email = ja.getJSONObject(i).getString("email");p.firstName = ja.getJSONObject(i).getString("firstName");p.lastName = ja.getJSONObject(i).getString("lastName");ps.add(p);}} catch (JSONException e) {e.printStackTrace();}第二种写法:[java] view plaincopypublic class MultiplePeople {public List<People> peoples;}[java] view plaincopyString jsonString = getJsonString();//json串try {JSONObject jb = new JSONObject(jsonString);JSONArray ja = jb.getJSONArray("people");MultiplePeople multiplePeople = new MultiplePeople();List<People> ps = new ArrayList<People>();for(int i = 0; i < ja.length(); i++){People p = new People();p.email = ja.getJSONObject(i).getString("email");p.firstName = ja.getJSONObject(i).getString("firstName");p.lastName = ja.getJSONObject(i).getString("lastName");ps.add(p);}multiplePeople.peoples = ps;} catch (JSONException e) {e.printStackTrace();}
文章转载自阿语python,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




