文档章节

Gson在java对象和json字符串之间转换

丁佳辉
 丁佳辉
发布于 2017/07/09 10:14
字数 915
阅读 43
收藏 0

GsonLib下载链接 
Gson相比org.json最大的好处是从json字符串转向java实例时候少了依据每个实例自己赋值的过程,比如在org.json的时候,我们先从json字符串构建一个jsonobject,然后用各种的json get方法获取到每个字段的值,这是一个体力活。而gson依据反射机制我们只要传递我们要实例化的类型class进去返回就是创建好的实例。大大减少了代码量。

先从java实例到json这个方向

构建了三个方法,分别测试javabean,list,map转化成json的用例。用法超级简单,实例化一个Gson实例,然后调用成员方法tojson,然后就转化成了json字符串。 
这个tojson方法不依靠原来对象的tostring方法。也就是说待json化的对象不实现tostring方法也可以成功json化。

package gson.demo.tojson;

import java.util.List;
import java.util.Map;

import com.google.gson.Gson;

import gson.demo.javabean.Person;

public class ObjectToJson {

    /**
     * javabean to json
     * 
     * @param person
     * @return
     */
    public static String javabeanToJson(Person person) {
        Gson gson = new Gson();
        String json = gson.toJson(person);
        return json;
    }

    /**
     * list to json
     * 
     * @param list
     * @return
     */
    public static String listToJson(List<Person> list) {

        Gson gson = new Gson();
        String json = gson.toJson(list);
        return json;
    }

    /**
     * map to json
     * 
     * @param map
     * @return
     */
    public static String mapToJson(Map<String, Person> map) {

        Gson gson = new Gson();
        String json = gson.toJson(map);
        return json;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

Json到java实例

这方面是Gson的优势 
关于new TypeToken<List<Person>>() {}.getType());的问题是eclipse没有提示要写对。这个参数的作用是给出实例化的模板

package gson.demo.tojson;

import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import gson.demo.javabean.Person;

public class JsonToObject {

    /**
     * json to javabean
     * 
     * @param json
     */
    public static void jsonToJavaBean(String json) {
        Gson gson = new Gson();
        Person person = gson.fromJson(json, Person.class);//对于javabean直接给出class实例
        System.out.println(person.toString());
    }

    /**
     * json字符串转List集合
     */

    public static void jsonToList(String json) {

        Gson gson = new Gson();
        List<Person> persons = gson.fromJson(json, new TypeToken<List<Person>>() {
        }.getType());//对于不是类的情况,用这个参数给出
        for (Person person : persons) {
            System.out.println(person);
        }
    }

    public static void jsonToMap(String json) {
        // TODO Auto-generated method stub
        Gson gson = new Gson();
        Map<String, Person> maps = gson.fromJson(json, new TypeToken<Map<String, Person>>() {
        }.getType());
        for (Map.Entry<String, Person> entry : maps.entrySet()) {
            System.out.println("key: " + entry.getKey() + "  " + "value: " + entry.getValue());

        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

最后给出测试数据

package gson.demo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import gson.demo.javabean.Book;
import gson.demo.javabean.Person;
import gson.demo.tojson.JsonToObject;
import gson.demo.tojson.ObjectToJson;

public class GsonDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // javabean to json
        Person person = new Person("彭晓", "dslkfjdslf", 344, new Book("java", "vincent"));
        System.out.println(ObjectToJson.javabeanToJson(person));

        // list to json
        List<Person> list = new ArrayList<>();
        list.add(person);
        Person p = new Person("彭真", "slfjdj", 32423, new Book("android", "郭林"));
        list.add(p);
        System.out.println(ObjectToJson.listToJson(list));

        // map json
        Map<String, Person> map = new HashMap<>();
        map.put("m1", person);
        map.put("m2", p);
        System.out.println(ObjectToJson.mapToJson(map));

        /**
         * 下面是json直接通过gson转换为实例对象
         */
        // json to javabean
        String json = "{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}}";
        JsonToObject.jsonToJavaBean(json);

        // json to list
        String str = "[{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}},{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}}]";
        JsonToObject.jsonToList(str);

        // json to map

        String mapStr = "{\"m1\":{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}},\"m2\":{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"红楼梦\",\"price\":0,\"author\":\"曹雪芹\"}}}";
        JsonToObject.jsonToMap(mapStr);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

执行效果 
这里写图片描述

本文转载自:http://blog.csdn.net/jq_ak47/article/details/52685298

共有 人打赏支持
丁佳辉
粉丝 20
博文 417
码字总数 198435
作品 0
浦东
程序员
私信 提问
Json转换利器Gson之实例

描述 Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来 示例 import java.lang.reflect.Type;import j...

cloud-coder
2014/12/19
0
5
Gson格式转换Integer变为Double类型问题解决

问题描述 在前后端分离的开发模式下,前后端交互通常采用JSON格式数据.自然会涉及到json字符串与JAVA对象之间的转换。实现json字符串与Java对象相互转换的工具很多,常用的有Json、Gson、Fas...

明MikeWoo
2018/12/28
0
0
有效选择七个关于 Java 的 JSON 开源类库

有效选择七个关于Java的JSON开源类库 April 4, 2014 By Constantin Marian Alin 翻译:无若 (英语原文:http://www.developer.com/lang/jscript/top-7-open-source-json-binding-providers-......

溪边九节
2014/04/19
12.5K
14
Gson 2.5.0 发布,Java的JSON类库

Gson 2.5.0 发布,更新如下: Updated minimum JDK version to 1.6 Improved Date Deserialization by accepting many date formats Added support for , , , , , . This change is backwar......

淡漠悠然
2015/12/10
4.3K
5
Gson 2.6.2 发布,Google 的 JSON 处理库

Gson 2.6.2 发布,Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。 该版本改进内容包括: Fixed an...

淡漠悠然
2016/02/28
8.5K
1

没有更多内容

加载失败,请刷新页面

加载更多

【转】初次提交项目到github

第一步:安装Git 第二步:在自己的工程目录下右键鼠标 选择 Git Bash Here 执行命令 git init 来创建一个本地代码仓库 执行命令 git add . 来把所有文件添加到仓库 执行命令 git commit -m ...

覃光林
17分钟前
3
0
Zend Studio使用教程:使用PHPUnit检测代码(五)

本教程演示如何在代码上创建和运行PHPUnit Test。您将学习如何创建和运行包含许多测试用例的单个单元测试用例和测试套件。 单元测试是一个测试代码的过程,以确保源代码的各个单元正常工作,...

电池盒
18分钟前
2
0
前端 联想搜索下拉框

data.result 为联想搜索出来的数组 innerhtml += "<ul style='list-style:none;font-size:13px;margin: 0px;padding: 5px;'>";for (var j = 0; j < data.result.length; j++) { var r......

yan_liu
18分钟前
2
0
预计2019年发布的Vue3.0到底有什么不一样的地方?

摘要: Vue 3.0预览。 原文:预计今年发布的Vue3.0到底有什么不一样的地方? 作者:小肆 Fundebug经授权转载,版权归原作者所有。 还有几个月距离 vue2 的首次发布就满 3 年了,而 vue 的作者...

Fundebug
18分钟前
2
0
跟我学Spring Cloud(Finchley版)-11-Feign常见问题总结

本文总结Feign常见问题及解决方案。 一、FeignClient接口如使用@PathVariable ,必须指定value属性 代码示例: @FeignClient("microservice-provider-user")public interface UserFeignCli......

周立_ITMuch
19分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部