在Android中,json解析十分普通,也有很多解析的方式。
JSONObject和Gson是最常见的方法。
本文采用的json串(关于车辆违章信息):
{
"ret": "0",
"ret_msg": "",
"violation_info": [{
"temp_id": 1975175,
"violation_road": "学海路(312国道至仙林大道路段)",
"violation_sn": 3201139057889278,
"violation_time": 20131224144200
},
{
"temp_id": 1975178,
"violation_road": "宁小线(122省道)",
"violation_sn": 3211837900461076,
"violation_time": 20130613180500
}]
}
采用JSONObject 方式:
程序:
private void jsonInit(String str){
Mode mode = new Mode();
try {
JSONObject jsonObject = new JSONObject(str);
String ret = jsonObject.optString( "ret");
String ret_msg = jsonObject.optString("ret_msg" );
JSONArray jsonArray = jsonObject.optJSONArray("violation_info" );
for( int i = 0; i < jsonArray.length(); i++){
String temp_id = jsonArray.getJSONObject(i).optString("temp_id" );
String violation_road = jsonArray.getJSONObject(i).optString("violation_road" );
String violation_sn = jsonArray.getJSONObject(i).optString("violation_sn" );
String violation_time = jsonArray.getJSONObject(i).optString("violation_time" );
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
可以看到解析的很繁琐,如果违章信息很多的话,每个信息都要去取,实在很麻烦。
采用Gson方式解析(必须建Mode,引入google Gson库):
需要定义的Mode类:
public class Mode {
private String ret;
private String ret_msg;
private List<violation_info> violation_info;//这个"violation_info"特别容易出错,一定要和json串里面的一样才行
public String getRet() {
return ret;
}
public void setRet(String ret) {
this.ret = ret;
}
public String getRet_msg() {
return ret_msg;
}
public void setRet_msg(String ret_msg) {
this.ret_msg = ret_msg;
}
public List<violation_info> getVio_List() {
return violation_info;
}
public void setVio_List(List<violation_info> vio_List) {
this.violation_info = vio_List;
}
}
class violation_info {
String temp_id;
String violation_road;
String violation_sn;
String violation_time;
public String getTemp_id() {
return temp_id;
}
public void setTemp_id(String temp_id) {
this.temp_id = temp_id;
}
public String getViolation_road() {
return violation_road;
}
public void setViolation_road(String violation_road) {
this.violation_road = violation_road;
}
public String getViolation_sn() {
return violation_sn;
}
public void setViolation_sn(String violation_sn) {
this.violation_sn = violation_sn;
}
public String getViolation_time() {
return violation_time;
}
public void setViolation_time(String violation_time) {
this.violation_time = violation_time;
}
}
程序:
private void gsonInit(String str){
Gson gson = new Gson();
Mode mode = gson.fromJson(str, Mode.class);
}
Gson也可以逆解析,将数据转换成json格式,采用了toJson方法。
private void gsonInit(String str){
Gson gson = new Gson();
Mode mode = gson.fromJson(str, Mode. class);
// 逆解析
String jsonStr = gson.toJson(mode);
Log. e("jsonStr" , jsonStr);
System. out.println(jsonStr);
}