Android 使用Gson解析json用法

目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://code.google.com/p/google-gson/


什么是JSON:


JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案.


JSON对象: 


JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing", "age"=24, "male":true, "address":{"street":"huiLongGuan", "city":"beijing", "country":"china"}}. JSON对象的key只能是string类型的, 而value可以是string, number, false, true, null, Object对象甚至是array数组, 也就是说可以存在嵌套的情况.


JSON数组: 


JSON数组(array)以"["开始, 以"]"结束, 数组中的每一个元素可以是string, number, false, true, null, Object对象甚至是array数组, 数组间的元素使用逗号分隔. 如["coolxing", 24, {"street":"huiLongGuan", "city":"beijing", "country":"china"}].


Gson的基本使用方法:

通过获取JsonReader对象解析JSON数据:

String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
	JsonReader reader = new JsonReader(new StringReader(jsonData));
	reader.beginArray();
	while(reader.hasNext()){
		reader.beginObject();
		while(reader.hasNext()){
			String tagName = reader.nextName();
			if(tagName.equals("username")){
				System.out.println(reader.nextString());
			}
			else if(tagName.equals("userId")){
				System.out.println(reader.nextString());
			}
		}
		reader.endObject();
	}
	reader.endArray();
}
catch(Exception e){
	e.printStackTrace();
}

 

通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作:

创建JSON数据对应的一个POJO对象User.java:

public class User {
	private String username ;
	private int userId ;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
}

使用Gson对象获取User对象数据进行相应的操作:

Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
	User user = (User) iterator.next();
	System.out.println(user.getUsername());
	System.out.println(user.getUserId());
}

如果要处理的JSON字符串只包含一个JSON对象,则可以直接使用fromJson获取一个User对象:

String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());
解析复杂实例:

数据格式:

[java]  view plain copy print ?
  1. {  
  2.     "data": {  
  3.         "partnerteamlist": [  
  4.             {  
  5.                 "pteamId"72825,  
  6.                 "ptitle""随摄影/共6套服装/准爸准妈共拍/免费肚画/底片全送。",  
  7.                 "pteamprice"288  
  8.             },  
  9.             {  
  10.                 "pteamId"72598,  
  11.                 "ptitle""随摄影/拍摄200张/4本相册/品质拍摄/送全新婚纱。",  
  12.                 "pteamprice"2888  
  13.             },  
  14.             {  
  15.                 "pteamId"72613,  
  16.                 "ptitle""随摄影/送全新婚纱/多外景拍摄/服装不限数量/绝无二次消费!",  
  17.                 "pteamprice"3699  
  18.             },  
  19.             {  
  20.                 "pteamId"72638,  
  21.                 "ptitle""随摄影/服装不限数量/高品质拍摄260张/送全新婚纱。",  
  22.                 "pteamprice"4299  
  23.             },  
  24.             {  
  25.                 "pteamId"72716,  
  26.                 "ptitle""随摄影/3组服装造型/内外景拍摄/完全透明消费!",  
  27.                 "pteamprice"388  
  28.             }  
  29.         ],  
  30.         "liketeamlist": [  
  31.             {  
  32.                 "lteamId"65886,  
  33.                 "ltitle""爱丽尔婚纱摄影/2本相册/6套服装造型/拍摄不限最低拍摄150张。",  
  34.                 "limage""http://img.pztuan.com/upfile/team/2013/0712/201307120257551465.jpg",  
  35.                 "lteamprice"518,  
  36.                 "lmarketprice"3999  
  37.             },  
  38.             {  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值