json 解析
JSON官网http://www.json.org,上面有所用语言对应的json工具。
http://my.oschina.net/sammy1990/blog/272510
--------------------------------------------------------------------------------
JSON Vs XML
1.JSON相对于XML来讲,同样的信息量,用json表述比xml描述数据量小。
2.JSON和XML的数据可读性基本相同
3.JSON对数据的详细描述没有XML好
--------------------------------------------------------------------------------
json就是一串有规范的字符串
json最外层有两种,对象{}或数组[]。
json对象:{k:v,k2:v2,k3:v3},对应java的map或类类型
json数组:[v,v2,v3],对应java的list或数组。
v值类型可以是:
null
对象
数组
字符串(在双引号内)
数字(整数或者浮点数)
逻辑值(true 或 false)
--------------------------------------------------------------------------------
json官方包是org.json.jar(android里自带了这个包)可以到官网现在源码导出这个jar包。
大部分json工具包提供了以下对象
JSONObject:json 对象(内部就是一个HashMap,map可以直接转成json对象)
JSONArray:json 数组(内部就是一个ArrayList,list可以直接转成json)
--------------------------------------------------------------------------------
json解析:
例如:
//json对象解析 String json1="{'k1':null,'k2':{'k1':'v1'},'k3':['v1','v2'],'k4';'v4','k5':7,'k6':true,'k7':false}"; JSONObject jsonObject=new JSONObject(json1); //k1解析 JSONObject nullObject=jsonObject.getJSONObject("k1"); //k2解析 JSONObject k2JSONObject=jsonObject.getJSONObject("k2"); String k2k1String=k2JSONObject.getString("k1"); //k3解析 JSONArray k3JSONArray=jsonObject.getJSONArray("k3"); String k3v1=k3JSONArray.getString(0); String k3v2=k3JSONArray.getString(1); //k4解析 String k4String=jsonObject.getString("k4"); //k5解析 int k5int=jsonObject.getInt("k5"); //k6解析 boolean k6boolean=jsonObject.getBoolean("k6"); //k7解析 boolean k7boolean = jsonObject.getBoolean("k7");
//json数组解析 //JSONArray 存的类型是相同的 String json2="['v1','v2']"; JSONArray jsonArray=new JSONArray(json2); for (int i=0;i<jsonArray.length();i++){ jsonArray.getString(i); }
Gson解析json是同java的反射机制解析的json对象对应一个java对象,json对象的每个key必须与
java的属性相同名。json数组对应java ArrayList。null 数字 boolean都可以按字符串解析。
//Gson解析json 对象 //"{'k1':null,'k2':{'k1':'v1'},'k3':['v1','v2'],'k4':'v4','k5':7,'k6':true,'k7':false}" //根据json串构建bean类型 class KBean{ //public Object k1; public String k1; public K2 k2; public ArrayList<String> k3; public String k4; //public int k5; //public boolean k6; //public boolean k7; public String k5; public String k6; public String k7; class K2{ String k1; } } String json1="{'k1':null,'k2':{'k1':'v1'},'k3':['v1','v2'],'k4':'v4','k5':7,'k6':true,'k7':false}"; KBean kbean =new Gson().fromJson(json1,KBean.class); Toast.makeText(this,kbean.k1+" "+ kbean.k3.get(0)+" "+kbean.k5+" "+ kbean.k6, Toast.LENGTH_LONG).show();
//Gosn json数组解析 String json2="['v1','v2']"; Type listType=new TypeToken<ArrayList<String>>(){}.getType(); ArrayList<String> list=new Gson().fromJson(json2,listType); Toast.makeText(this, list.get(0), Toast.LENGTH_LONG).show();