Java4Android之Gson

一般而言,我们通过http请求传送数据,采用json数据传输。如何解析json,一个我们用的库是Gson。我引用一个入门的例子在此,作为学习范本。在后续的相关代码中,其实是会使用到的。

参考及转载:

http://www.cnblogs.com/chenlhuaf/archive/2011/05/01/gson_test.html

http://blog.sina.com.cn/s/blog_64e467d60101ibpd.html

使用Gson进行解析:下载google-gson-2.2.2-release.zip包。

包含两种主要操作:一种是将对象或者不同的内容转化为JSON格式,一种是将JSON格式的内容还原到相应的对象属性或者其他属性。

1、首先使用:Gson
gson = new Gson();  创建gson对象

2、要把数据转化为JSON格式时,可以在新建一个JavaBean类:

public class Person
{

    private String name;

    private int age;

    public String
getName() {

        return name;

    }

    public void setName(String
name) {

        this.name =
name;

    }

    public int getAge()
{

        return age;

    }

    public void setAge(int age)
{

        this.age =
age;

    }

    @Override

    public String
toString() {

        return name + ":" + age;

    }

}

 

在主函数中使用如下语句:

Person p = new Person();

p.setAge(22);

p.setName("Curry");

persons.add(p);//将Person对象加入到gson中

String str = gson.toJson(p);

 

直接输出,得到以下结果:{"name":"Curry","age":22}

 

而当在gson中加入list类型的对象时:

List persons = new ArrayList();

for (int i
= 0; i < 3; i++) {

        Person
p = new Person();

        p.setName("name" +
i);

        p.setAge(i * 5);

        persons.add(p);

    }

String str = gson.toJson(persons);

将输出以下结果:(格式是数组类型的)[{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10}]

 

HashMap tool = new HashMap();

tool.put("ID", "22");

String str = gson.toJson(tool);

以上表示加入的对象本身就是Map类型的,则输出以下结果:{"ID":"22"}

 

而如果加入的JavaBean中还包括其他的List类型的数据,例如:(代码片段)

public class Person
{

    private String name;

    private int age;

    private ArrayList car;

则输出结果变成这样:

[{"name":"name0","age":0,"car":["cc","ford"]},{"name":"name1","age":5,"car":["cc","ford"]},{"name":"name2","age":10,"car":["cc","ford"]}]

1、   解析JSON对象,将其还原为JavaBean,或者相应的数据类型

String json = "{\"name\":\"Duke\",\"address\":\"Menlo Park\",\"dateOfBirth\":\"Feb 1, 2000 12:00:00 AM\"}";//JSON格式的数据

Gson gson = new Gson();

Student student = gson.fromJson(json, Student.class);//指定了要还原的class,保存在gson中。

System.out.println("student.getName()  =
" + student.getName());

System.out.println("student.getAddress()
= " + student.getAddress());

System.out.println("student.getDateOfBirth()
= "

                +
student.getDateOfBirth());//可以直接从student对象中获取到所有数据了。

 

4、如果Json对象本身是List形式的,或者其他的类型,则采用以下方法:

可以借助TypeToken获取泛型参数的类型。

String json = "[{\"name\":\"Duke\",\"address\":\"Menlo
Park\",\"dateOfBirth\":\"Feb 1, 2000 12:00:00 AM\"}]";

Gson gson = new Gson();

//使用Type类,取得相应类型对象的class属性。

Type
listType=newTypeToken<ArrayList<Student>>(){}.getType();//TypeToken内的泛型就是Json数据中的类型

        ArrayList list = gson.fromJson(json,
listType);//使用该class属性,获取的对象均是list类型的

        System.out.println("student.getName()  =
" + list.get(0).getName());//从list中取得内容即可

        System.out.println("student.getAddress()
= " + list.get(0).getAddress());

        System.out.println("student.getDateOfBirth()
= "

                +
list.get(0).getAddress());

 

 

因此,无论是把对象转化为Json格式,还是把Json格式还原为对象时,都需要确定好相应的数据类型或者 JavaBean的格式。这样就可以很方便的使用Gson进行转化了。

时间: 2024-11-05 04:50:34

Java4Android之Gson的相关文章

Json转换神器之Google Gson的使用

这几天,因为项目的需要,接触了Google的Gson库,发现这个东西很好用,遂记下简单的笔记,供以后参考.至于Gson是干什么的,有什么优点,请各位同学自行百度.话不多说,切入正题: 1. 下载Gson的jar包,拷贝到项目的lib文件夹中,并将其加入到buildPath中.使用maven的同学,直接在pom中加入以下依赖即可: ? 1 2 3 4 5 <dependency> <groupId>com.google.code.gson</groupId> <ar

接口交互参数最好不要用map?(Gson转map)

问题描述 接口交互参数最好不要用map?(Gson转map) 今天在做webService开发时,用到了map,但是被告知最好不要用,说原因是"接口交互参数最好不要用map,效率低,不便于理解,而且分层不清楚",真的是这样吗?求大神解答. 解决方案 用什么都可以 只要用的方便: 这个是 gson 转map的教程 推荐你看看 http://www.sh0745.com/java/201503/26155454.html 解决方案二: 既然是webservice,那么接口就用json好了.

gson-Android Gson解析boolean错误

问题描述 Android Gson解析boolean错误 今天突然出现了这种怪异的现象,我使用gson来解析服务器返回的json数据,json中有个字段isSuccess,是boolean类型,今天在请求的时候始终得不到正确的回应,一调试才知道isSuccess为false,但是返回的json中isSuccess是为true的,这种情况也不是每次都会发生,有时候又是正常的,服务器返回的json也是一样的,但是就会出现isSuccess会被解析成false的情况,有人遇到过这种情况吗? 发现了新的

实用Gson进行json数据转换

gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段. 下面是一个简单的例子:     public class Person {                private String name;          private int age;                /**          * @return the name

Gson解析不规则json类

问题描述 Gson解析不规则json类 {"name":"市场报告","indexlist":{"indexM": [{"market":"一般市场","price":"1125","volume":"18732","sales":"21.07"}, {"ma

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

[正文] 文章回顾: Android网络之数据解析----SAX方式解析XML数据 一.Json数据的介绍                                                                                                                 Json(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JS的一个子集. Json采用完全独立于语言的文本格式,这使得Jso

java-加载GSON的时候出现EOF错误

问题描述 加载GSON的时候出现EOF错误 用GSON转换Json字符串为对象,从文件中加载字符串时: File f = new File(Environment.getExternalStorageDirectory() + File.separator + ""jsonTest""); BufferedReader br = new BufferedReader(new FileReader(f)); String Json = br.readLine(); b

Android学习笔记45之gson解析json_Android

JSON即JavaScript Object Natation, 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing

Android中gson、jsonobject解析JSON的方法详解_Android

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON对象: JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, ke