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

二、什么是JSON:

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

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

解析复杂实例:

数据格式:(对于格式比較乱json数据,我们能够使用HIJSON工具进行代码的格式化!)

{
"data": {
"partnerteamlist": [
{
"pteamId": 72825,
"ptitle": "随摄影/共6套服装/准爸准妈共拍/免费肚画/底片全送。",
"pteamprice": 288
},
{
"pteamId": 72598,
"ptitle": "随摄影/拍摄200张/4本相冊/品质拍摄/送全新婚纱。",
"pteamprice": 2888
},
{
"pteamId": 72613,
"ptitle": "随摄影/送全新婚纱/多外景拍摄/服装不限数量/绝无二次消费!",
"pteamprice": 3699
},
{
"pteamId": 72638,
"ptitle": "随摄影/服装不限数量/高品质拍摄260张/送全新婚纱。",
"pteamprice": 4299
},
{
"pteamId": 72716,
"ptitle": "随摄影/3组服装造型/内外景拍摄/全然透明消费!",
"pteamprice": 388
}
],
"liketeamlist": [
{
"lteamId": 65886,
"ltitle": "爱丽尔婚纱摄影/2本相冊/6套服装造型/拍摄不限最低拍摄150张。",
"limage": "http://img.pztuan.com/upfile/team/2013/0712/201307120257551465.jpg",
"lteamprice": 518,
"lmarketprice": 3999
},
{
"lteamId": 57133,
"ltitle": "陶冶摄影/婚纱闺蜜/6组服装造型/拍摄不低于120张!",
"limage": "http://img.pztuan.com/upfile/team/2013/0628/201306281115249737.jpg",
"lteamprice": 580,
"lmarketprice": 3380
}
],
"feedbacks": {
"feedbacklist": [
{
"comment": "5分",
"createtime": "2014.07.08 13:38",
"score": 5,
"username": "l***2"
}
],
"totalcount": 1,
"totalscore": 5
}
},
"err": null,
"state": 1
}

实体类(里面的成员变量和接口的返回值名称一 一相应才干保证解析正确):

import java.util.List;

public class OtherDetail {

    private int state;
private List<err> err;
private OtherDetail2 data; public int getState() {
return state;
} public void setState(int state) {
this.state = state;
} public List<err> getErr() {
return err;
} public void setErr(List<err> err) {
this.err = err;
} public OtherDetail2 getData() {
return data;
} public void setData(OtherDetail2 data) {
this.data = data;
} public class OtherDetail2 {
private List<partnerteamlist> partnerteamlist;
private List<liketeamlist> liketeamlist;
private List<feedbacks> feedbacks; public List<liketeamlist> getLiketeamlist() {
return liketeamlist;
} public void setLiketeamlist(List<liketeamlist> liketeamlist) {
this.liketeamlist = liketeamlist;
} public List<feedbacks> getFeedbacks() {
return feedbacks;
} public void setFeedbacks(List<feedbacks> feedbacks) {
this.feedbacks = feedbacks;
} public class partnerteamlist {
private int pteamId;
private String ptitle;
private Double pteamprice; public int getPteamId() {
return pteamId;
} public void setPteamId(int pteamId) {
this.pteamId = pteamId;
} public String getPtitle() {
return ptitle;
} public void setPtitle(String ptitle) {
this.ptitle = ptitle;
} public Double getPteamprice() {
return pteamprice;
} public void setPteamprice(Double pteamprice) {
this.pteamprice = pteamprice;
} } public class liketeamlist {
private int lteamId;
private String ltitle;
private String limage;
private Double lteamprice;
private Double lmarketprice; public int getLteamId() {
return lteamId;
} public void setLteamId(int lteamId) {
this.lteamId = lteamId;
} public String getLtitle() {
return ltitle;
} public void setLtitle(String ltitle) {
this.ltitle = ltitle;
} public String getLimage() {
return limage;
} public void setLimage(String limage) {
this.limage = limage;
} public Double getLteamprice() {
return lteamprice;
} public void setLteamprice(Double lteamprice) {
this.lteamprice = lteamprice;
} public Double getLmarketprice() {
return lmarketprice;
} public void setLmarketprice(Double lmarketprice) {
this.lmarketprice = lmarketprice;
}
} public class feedbacks {
private int totalcount;
private Double totalscore;
private List<feedbacklist> feedbacklist; public int getTotalcount() {
return totalcount;
} public void setTotalcount(int totalcount) {
this.totalcount = totalcount;
} public Double getTotalscore() {
return totalscore;
} public void setTotalscore(Double totalscore) {
this.totalscore = totalscore;
} public List<feedbacklist> getFeedbacklist() {
return feedbacklist;
} public void setFeedbacklist(List<feedbacklist> feedbacklist) {
this.feedbacklist = feedbacklist;
} public class feedbacklist {
private String username;
private String comment;
private String createtime;
private Double score; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getComment() {
return comment;
} public void setComment(String comment) {
this.comment = comment;
} public String getCreatetime() {
return createtime;
} public void setCreatetime(String createtime) {
this.createtime = createtime;
} public Double getScore() {
return score;
} public void setScore(Double score) {
this.score = score;
} }
} public List<partnerteamlist> getPartnerteamlist() {
return partnerteamlist;
} public void setPartnerteamlist(List<partnerteamlist> partnerteamlist) {
this.partnerteamlist = partnerteamlist;
}
} public class err {
private int code;
private String msg; public int getCode() {
return code;
} public void setCode(int code) {
this.code = code;
} public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
}
}
}

注意上面内部类的运用。

解析:

Gson gson = new Gson();
OtherDetail d = gson.fromJson(jsonString,Detail.class);//取值的时候就从父类一层一层调子类成员(重要)

Android 使用Gson解析json案例具体解释的更多相关文章

  1. Android用Gson解析JSON字符串

    在volley框架中有一个 protected Response<Result<T>> parseNetworkResponse(NetworkResponse respons ...

  2. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  3. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  5. Gson解析json数据的案例一

    转自:http://blog.csdn.net/l331258747/article/details/51547338: Android利用Gson解析嵌套多层的Json 首先先讲一个比较简单点的例子 ...

  6. Android中使用Gson解析JSON数据

      Android中使用Gson解析JSON数据 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list ...

  7. 【Android进阶】Gson解析json字符串的简单应用

    在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...

  8. 使用Gson解析json

    前边的博客说过将json解析成java的方法,使用的是 这几个jar包,但是在解析时层遇到一个问题,就是在将时间字符串转换为java的Timestamp对象时会抛出异常,这个问题一直放在哪里没有去解决 ...

  9. $Java-json系列(一):用GSON解析Json格式数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

随机推荐

  1. Android文本Flood it游戏源代码

    flood_it 流行的Flood it游戏的Android版 游戏玩法: 按下屏幕下方的颜色button,左上角的色块就会变颜色.仅仅要把整片色块变成同色就赢了. 效果图 <ignore_js ...

  2. 编译的依赖不能vs的release工程

    前言: 今天,我们正在做一个ocx插件的时候,放到刚装好win7系统的虚拟机上面注冊,弹出以下的一个错误提示: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ ...

  3. Git Config(转)

    一.Git已经在你的系统中了,你会做一些事情来客户化你的Git环境.   你只需要做这些设置一次:即使你升级了,他们也会绑定到你的环境中.你也可以在任何时刻通过运行命令来重新更改这些设置.      ...

  4. Testin一日游实验室发布的行级APP质量报告:在那里拍携程双赢

    Testin实验室公布国庆出行旅途类APP质量报告:携程力压去哪儿夺冠 2014/09/28 · Testin · 实验室报告 一年一度的十一黄金周即将临近,旅游软件成为每外出行人手机必装软件.为此全 ...

  5. Binary Tree Maximum Path Sum [leetcode] dp

    a(i):在节点i由于单边路径的最大结束 b(i):在节点i路径和 a(i) = max{ i->val, i->val + max{a(i->left), a(i->righ ...

  6. 馋-c语言的规则

    在记者采访过程,有着c的认识的情况,有时会被问到有关字符搭配以及运算先后顺序的问题,比方a+++++b的值.++i+++i+++i+i的值等类似的,这都属于c的符号方面的问题.那么如何才干轻而易举的去 ...

  7. 高性能网络server--I/O复 select poll epoll_wait之间的差

    一个.select 方式作为收集,最多只能监控1024描述叙事断裂的文件,内部使用位操作,相应的位置1或设置0,必须是可读.可写.三类除单独的事件,内部查询方法.将全部的套接字从内核到用户空间之间进行 ...

  8. 栈 & 堆 |--> 内存管理

    内存管理: 栈区 [stack]:由编译器自动分配并释放,一般存放函数的参数值,局部变量等 堆区 [heap]:由程序员分配和释放,如果程序员不释放,程序结束时,可能会由操作系统回收 全局区(静态区) ...

  9. MyEclipse使用总结——MyEclipse文件查找技巧

    原文:MyEclipse使用总结--MyEclipse文件查找技巧 一.查找文件 使用快捷键[ctrl+shift+R]弹出弹出文件查找框,如下图所示: 二.查找包含某个字符串的文件 使用快捷键[ct ...

  10. linux虚拟文件系统2

    转自:http://rstevens.iteye.com/blog/849413 一.概述 Linux 文件系统是相当复杂的,本文只分析虚拟文件系统的实现,对具体的文件系统不涉及. 即使是虚拟文件系统 ...