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();