Android的json解析方式(一)

本文介绍在Android应用中使用JSONObject和Gson两种方法解析JSON数据的过程。通过实例对比了这两种方法的特点,展示了如何定义数据模型并利用Gson进行高效的数据解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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);
     }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值