Android中使用Gson解析JSON数据的两种方法
程序员文章站
2023-12-04 11:16:22
json是一种类似于xml的通用数据交换格式,具有比xml更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),...
json是一种类似于xml的通用数据交换格式,具有比xml更高的传输效率.
从结构上看,所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(list),比如"北京,上海"。
第三种类型是映射(mapping),也就是一个名/值对(name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。
json的规格非常简单,只用一个页面几百个字就能说清楚,而且douglas crockford声称这个规格永远不必升级,因为该规定的都规定了。
1) 并列的数据之间用逗号(",")分隔。
2) 映射用冒号(":")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。
在android中可以使用gson解析json数据
首先,从 code.google.com/p/google-gson/downloads/list下载gsonapi:
google-gson-1.7.1-release.zip
把gson-1.7.jar copy到libs(项目根目录新建一个libs文件夹)中。
可以使用以下两种方法解析json数据:
通过获取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());
从结构上看,所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(list),比如"北京,上海"。
第三种类型是映射(mapping),也就是一个名/值对(name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。
json的规格非常简单,只用一个页面几百个字就能说清楚,而且douglas crockford声称这个规格永远不必升级,因为该规定的都规定了。
1) 并列的数据之间用逗号(",")分隔。
2) 映射用冒号(":")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。
在android中可以使用gson解析json数据
首先,从 code.google.com/p/google-gson/downloads/list下载gsonapi:
google-gson-1.7.1-release.zip
把gson-1.7.jar copy到libs(项目根目录新建一个libs文件夹)中。
可以使用以下两种方法解析json数据:
通过获取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());
上一篇: html5在移动端的屏幕适应问题示例探讨