文档章节

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

丁佳辉
 丁佳辉
发布于 2017/07/09 10:14
字数 915
阅读 36
收藏 0
点赞 0
评论 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

执行效果 
这里写图片描述

© 著作权归作者所有

共有 人打赏支持
丁佳辉
粉丝 18
博文 382
码字总数 195396
作品 0
浦东
程序员
Gson把Java POJO和Json数据字符串之间相互转换

Gson把Java POJO和Json数据字符串之间相互转换 例如: POJO pojo = new POJO(); 输出: 04-19 14:05:29.528 25587-25587/zhangphil.test D/POJO转换为Json字符串: {"id":1,"name":"zhangphil......

zhangphil ⋅ 04/19 ⋅ 0

Gson 2.8.5 发布,Google 开源的 Java JSON 类库

Gson 2.8.5 已发布,Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。 更新内容: 当抛出 AssertionError 和 IllegalArgumentException 时打印 Gson 版本 将 ...

王练 ⋅ 05/25 ⋅ 0

Gson 2.8.4 发布,Google 开源的 Java JSON 类库

Gson 2.8.4 已发布,Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。 2.8.4 更新内容 Added a new FieldNamingPolicy, that mapps JSON name to Fixed issue...

淡漠悠然 ⋅ 05/04 ⋅ 0

[学习笔记] [JSON] 轻量级数据交换格式JSON学习笔记

JSON基本概念: JSON全名: Java Script Object Natation. 即JavaScript的对象表现形式。 目前已经发展成一种轻量级的数据交换格式。 特点:不依赖于任何语言,跨平台。 使用场景主要用于不同...

kris_fei ⋅ 05/03 ⋅ 0

从 ServiceMethod角度来认识retrofit框架

对于Android开发者而言,retrofit可以说算是比较实用的网络请求框架,而且是开源的。那么,从请求执行的角度,以 interface 中我们定义的方法为起始,解读 retrofit 的执行流程。目的是想让我...

小欣妹妹 ⋅ 04/25 ⋅ 0

GSON使用笔记(3) -- 如何反序列化出List

GSON使用笔记(3) -- 如何反序列化出List 时间 2014-06-26 17:57:06 CSDN博客原文 http://blog.csdn.net/zxhoo/article/details/34856061 本文通过3个问题来讨论如何使用 GSON 把JSON反序列...

thinkyoung ⋅ 2015/03/24 ⋅ 0

React Native通信原理源码分析一

小伙伴们都知道在Android开发中实现Java和JS的通信可以通过WebView来实现,包括注册JSBridge或者在接口中拦截都可以。然而React Native中并没有用WebView控件的方式,而是基于WebKit内核的方...

juexingzhe ⋅ 04/08 ⋅ 0

Java开发每日复盘2018_0514

今天主要跟大家分享3个部分: 一、「Java的核心机制」 二、「Java命名规范」 三、「Java数据类型相关」 下面我们来一个一个的说: 「Java核心机制」 Java是一种强制面向对象的解释型语言(O...

ZeroOSTalk ⋅ 05/14 ⋅ 0

Kotlin语言中的泛型设计哲学

Kotlin语言的泛型设计很有意思,但并不容易看懂。关于这个部分的官方文档,我反复看了好几次,终于弄明白Kotlin语言泛型设计的背后哲学。这篇文章将讲述Kotlin泛型设计的整个思考过程及其背后...

欧阳锋 ⋅ 04/16 ⋅ 0

Common Gui Tools 1.4 发布,Java GUI 实用小工具集

Java GUI实用小工具集 Common Gui Tools 新增:二维码生成解析、时间戳转换、Json格式化、文本文件切分等。 Common Gui Tools 是用java编写,GUI界面的实用小工具集,1.4版有20个小工具: 1,...

bs2004 ⋅ 04/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部