目前解析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());

解析复杂实例:

数据格式:

 {
"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
}

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

     package com.pztuan.entity;  

     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 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);//取值的时候就从父类一层一层调子类成员(重要)

若出现引用异常,请查看Java内部类设计原则。

参考:http://www.itzhai.com/android-to-parse-json-data-using-gson.html

http://blog.csdn.net/caijunjun1006/article/details/11762841

来自:http://blog.csdn.net/rain_butterfly/article/details/38404293

Android Gson解析json详解的更多相关文章

  1. Android Gson解析json工具类封装

    package com.springSecurity.gson; import java.util.ArrayList; import java.util.List; import java.util ...

  2. Python解析JSON详解

    JSON 函数 使用 JSON 函数需要导入 json 库:import json. 函数  描述 json.dumps  将 Python 对象编码成 JSON 字符串 json.loads  将已 ...

  3. 使用Python解析JSON详解

    为大家介绍如何使用 Python 语言来编码和解码 JSON 对象. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. JSON 函数 ...

  4. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. hdu3790最短路径问题(BFS+优先队列)

    Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的.   Inp ...

  2. Android Path Time ScrollBar(Path 时间轴)

    版本号:1.0 日期:2014.4.22 版权:© 2014 kince 转载注明出处   这是仿Path2.0UI的一个demo的截图,我最早是在农民伯伯的这篇博客中看到的[Andorid X 项目 ...

  3. windows设置共享

    设置共享: 添加用户 点击添加 设置权限 然后别人就可以查看了. 查看共享: 删除共享:

  4. Oracle rac架构和原理

        Oracle RAC Oracle Real Application Cluster (RAC,实时应用集群)用来在集群环境下实现多机共享数据库,以保证应用的高可用性:同时可以自动实现并行处理 ...

  5. 【笨木头Lua专栏】基础补充05:迭代器番外篇

    关于迭代器的内容, 另一点点,只是已经无关紧要了.应该算是一种扩展吧.就一起来开开眼界好了~ 笨木头花心贡献.哈?花心?不.是用心~ 转载请注明,原文地址: http://www.benmutou.c ...

  6. Objective—C中的排序及Compare陷阱

    campare陷阱 NSString有多个compare相关方法: - (NSComparisonResult)compare:(NSString *)string; - (NSComparisonR ...

  7. Wordpress中文章的特色图像Featured Image究竟存在哪里?

    最近项目需要,分析了一下Wordpress的特色图像 Feature Image的上传.保存方式,这一分析觉得Wordpress的数据结构设计还真是有想法. 先简单说一下结论: Wordpress中图 ...

  8. 内存及字符串操作篇strlen strchar strcmp strcoll strcpy strdup strstr strtok strspn strrchr bcmp bcopy bzero index memccpy memset

    bcmp(比较内存内容) 相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp 表头文件 #include<string.h> 定 ...

  9. flask_wtf/wtforms几个坑点,先简单记此

    1.@pluginquery.route('/app_include_plugins', methods=['GET','POST']) methods必须填写 2.plu_incl_app = St ...

  10. MySQL中limit的用法

    SELECT * FROM table  LIMIT [offset,] rows | rows OFFSET offset   LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.L ...