gson 入门_Google GSON入门

gson 入门

在Java世界中,JSON已成为事实上的XML数据交换格式标准,因为它的易用性和传输效率高。

如果您不了解JSON,那就是Javascript对象表示法,这是一种基于文本的数据交换格式,是名称-值的集合,其中名称严格是字符串类型,值可以是int,布尔值,数组或其他json对象。

GSON是Google开发的开源Java库。 它是用于将Java对象与json表示形式转换的API。

为什么要使用它?

  • 将任何Java对象(即新对象或任何现有/旧版对象)转换为JSON,反之亦然。
  • 对通用对象的最佳支持
  • 简单方便的转换方法
  • 无需任何注释的字段进行转换
  • 默认情况下,所有字段(包括私有字段)都包含在转化中
  • 如果不想在转换中包含该字段,请对该字段使用瞬变修饰符
  • 它通过不将其包含在序列化输出中,而在反序列化期间将其初始化回null,从而优雅地处理null字段。

如何将其添加到项目中?

使用以下方法之一将其添加为依赖项

使用Maven

将以下依赖项添加到项目的pom.xml中

<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.2.4</version>
</dependency>

使用Gradle

在项目的build.gradle中添加以下内容

repositories {mavenCentral()
}dependencies {compile 'com.google.code.gson:gson:2.2.4'
}

用作非托管依赖项

如果不使用任何构建工具,则可以将gson jar添加到直接classpath或构建路径中。

从GSON项目的下载页面下载最新的jar。 下载的zip文件包含3个jar文件-二进制文件,源代码和javadoc。 抓取二进制jar文件并将其添加到您的项目类路径中。

如何使用它 ?

为了将对象与json相互转换,您需要使用Gson类及其以下2种方法。

toJson() =>转换提供给json字符串的对象,将要转换的对象作为参数并返回json表示字符串

fromJSon() =>将json字符串转换为object,将第一个参数作为json字符串作为object和目标对象的类文字,并返回目标对象

您可以多次使用Gson实例/对象,因为它不会保持任何状态。

以下是一些说明使用GSON API的示例。

示例1:对于简单对象

考虑以下模型对象以进行转换,但是请记住,您可以转换任何对象

模型对象

package in.ajduke.ap012;
/**
* An model for gson demo 
* 
* @author ajduke
*/
public class ModelObject {String name;int val;boolean status;double f;public ModelObject(String name, int val, boolean status, double f) {super();this.name = name;this.val = val;this.status = status;this.f = f;}@Overridepublic String toString() {return "ModelObject [name=" + name + ",val=" + val + ", status="+ status + ", f=" + f + "]";}}

以下是转换对象到json表示形式的清单,

Example1.java

final Gson gson = new Gson();
// original object instantiation
ModelObject modelObject = new ModelObject("myname", 12, true, 2.3);
System.out.println("toJson ---");
System.out.println("Original Java object : " + modelObject);
// converting an object to json object
String json = gson.toJson(modelObject);
System.out.println("Converted JSON string is : " + json);System.out.println("fromJson----");
// getting object from json representation
System.out.println("Original JSON string is : " + json);
// converting json to object
ModelObject modelObject1 = gson.fromJson(json, ModelObject.class);
System.out.println("Converted Java object : " + modelObject1);

请注意fromJson()的签名,它使用第二个参数作为目标对象的类文字。

输出如下,

示例1-输出

toJson ---
Original Java object : ModelObject [name=myname, val=12, status=true, f=2.3]
Converted JSON string is : {"name":"myname","val":12,"status":true,"f":2.3}
fromJson----
Original JSON string is : {"name":"myname","val":12,"status":true,"f":2.3}
Converted Java object : ModelObject [name=myname, val=12, status=true, f=2.3]

示例2:对于通用对象

为了将通用对象从json表示形式转换回Java对象,我们需要使用use extra对象,如下所示

类型collectionType = new TypeToken <{具有类型信息的通用对象}>(){}。getType();

您需要向TypeToken类型参数信息提供目标类类型,如上所示。 这是形成Type实例,我们需要将它作为第二个参数传递给fromJson()方法。

以下清单显示了将通用类或类从集合框架转换为json或从json转换的示例

GenericModel.java

package in.ajduke.ap012;
/**
* An generified model for demo of gson conversion 
* @author ajduke
*/
public class GenericModel<T> {T value;public GenericModel(T value) {super();this.value = value;}@Overridepublic String toString() {return "Model2 [value=" + value + "]";}
}

Example2.java

Gson gson = new Gson();System.out.println("A generic object demo");
// a generified object
GenericModel<Integer> model = new GenericModel<>(12);// converting to json representation
String json = gson.toJson(model);
System.out.println("json representation :" + json);// converting back to object
Type collectionType = new TypeToken<GenericModel<Integer>>() {
}.getType();
GenericModel<Integer> modelObj = gson.fromJson(json, collectionType);
System.out.println("converted object representation: " + modelObj);System.out.println("\nA object from collection framework\n");
// for collection framework objects
List<String> listOfString = new ArrayList<>();
listOfString.add("ajduke");
listOfString.add("ajduchess");// conversion to json
String jsonStr = gson.toJson(listOfString);
System.out.println("json representation :" + jsonStr);Type collectionType2 = new TypeToken<List<String>>() {
}.getType();
List<String> listObj = gson.fromJson(jsonStr, collectionType2);
System.out.println("converted object representation: " + listObj);

输出如下

例2-输出

A generic object demo
json representation :{"value":12}
converted object representation: Model2 [value=12]A object from collection frameworkjson representation :["ajduke","ajduchess"]
converted object representation: [ajduke, ajduchess]

示例3:使用瞬态

如果您不想在json表示形式中包含某些字段,则可以对变量声明使用transient修饰符,然后在将其转换为json表示形式时,GSON会忽略该变量。 但是,当从json字符串转换回对象时,它会根据变量类型初始化其默认值 。

考虑我们的ModelObject,让我们从json表示中跳过整数val,因此,将其声明修改为transient,如下面的清单所示

ModelObject2.java

package in.ajduke.ap012;
/**
* An model for demo of gson conversion 
* 
* @author ajduke
*/
public class ModelObject {String name;transient int val;boolean status;double f;public ModelObject(String name, int val, boolean status, double f) {super();this.name = name;this.val = val;this.status = status;this.f = f;}@Overridepublic String toString() {return "ModelObject [name=" + name + ",val=" + val + ", status="+ status + ", f=" + f + "]";}
}

以下是清单

Example3.java

Gson gson = new Gson();
// original object
ModelObject modelObject = new ModelObject("namesake", 50, true, 4.3);
System.out.print("Original Java object : ");
System.out.println(modelObject);// converting to an json representation
String json = gson.toJson(modelObject);
System.out.print("Converted JSON string is : ");
System.out.println(json);// getting back the object from json representation
ModelObject modelObject3 = gson.fromJson(json, ModelObject.class);
System.out.print("Converted Java object : ");
System.out.println(modelObject3);

因此,在进行转换时,GSON忽略了上述内容并输出如下

example3-输出

Original Java object : ModelObject [name=namesake, val=50, status=true, f=4.3]
Converted JSON string is : {"name":"namesake","status":true,"f":4.3}
Converted Java object : ModelObject [name=namesake, val=0, status=true, f=4.3]
Thats all folks, for GSON introduction !!

注意:我已经为所有示例提供了小段代码,要访问完整列表,请访问github上的要点

下一步是什么 ?

在接下来的几篇文章中,我将向您展示GSON库的一些其他优点,

所以,请继续关注!!!

参考:来自ajduke博客博客的JCG合作伙伴 Abhijeet Sutar的 Google GSON入门 。

翻译自: https://www.javacodegeeks.com/2013/08/getting-started-with-google-gson.html

gson 入门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面向对象(18)--final关键字使用

在Java中声明类、变量和方法时&#xff0c;可使用关键字final来修饰,表示“最终的”。 final标记的类不能被继承&#xff0c;提高安全性&#xff0c;提高程序的可读性 如&#xff1a;String类、System类、StringBuffer类。 final标记的方法不能被子类重写 如&#xff1a;Objec…

php 高级搜索下拉框,高级搜索页面advancedsearch.php调用自定义字段

下面跟大家谈的是关于”如何在在高级搜索页面advancedsearch.php调用自定义字段“方法&#xff1a;步骤&#xff1a;找到advancedsearch.php页面。$query "select main.id as aid,main.*,main.description as description1, type.* from $maintable main left join dede2…

创新设计模式:抽象工厂模式

抽象工厂模式是一种创建模式&#xff0c;是与构建器和工厂模式一起最受欢迎的模式之一。 使用创建模式是为了创建对象&#xff0c;而不是直接使用构造函数创建对象。 抽象工厂模式提供了一种封装一组具有共同主题的单个工厂而无需指定其具体类的方法。 采用该模式的目的是使对…

php算法台阶,php如何解决青蛙跳台阶的问题(代码)

本篇文章给大家带来的内容是关于php如何解决青蛙跳台阶的问题(代码)&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后…

Java面向对象(19)--抽象类与抽象方法abstract

用abstract关键字来修饰一个类&#xff0c;这个类叫做抽象类。 用abstract来修饰一个方法&#xff0c;该方法叫做抽象方法。 抽象方法&#xff1a;只有方法的声明&#xff0c;没有方法的实现。以分号结束&#xff1a; 比如&#xff1a;public abstract void talk(); 含有抽象…

php检测一个变量是否设置函数,php如何判断变量是否有设置的函数

php判断变量是否有设置的函数的方法&#xff1a;可以利用isset()函数来进行判断。isset()函数用于检测变量是否已设置并且非NULL。如果指定变量存在且不为NULL&#xff0c;则返回TRUE&#xff0c;否则返回FALSE。isset() 函数用于检测变量是否已设置并且非 NULL。(推荐教程&…

Java面向对象(20)--接口

接口的使用 ①接口使用interface来定义 ②Java中&#xff0c;接口和类是并列的两个结构 ③定义接口中的成员 JDK7及以前:只能定义全局常量和抽象方法 全局常量: public static final修饰的&#xff0c;书写时&#xff0c;可以省略不写 抽象方法: public abstract修饰的&#x…

java轮询文件停止线程,java 运行多线程轮询时,外部停止轮询

1&#xff0c;先建一个Map/*** 创建一个Map用于存放线程id对象集合&#xff0c;主要是用于到达岗亭之后扫码付费&#xff0c;如果人工收费就需要关闭线程&#xff0c;key是停车记录Id&#xff0c;*/public static MapMAPTHREAD new HashMap();2.建一个线程类继承Runnable/*** …

Java面向对象(21)--内部类

当一个事物的内部&#xff0c;还有一个部分需要一个完整的结构进行描述&#xff0c;而这个内部的完整的结构又只为外部事物提供服务&#xff0c;那么整个内部的完整结构最好使用内部类。 在Java中&#xff0c;允许一个类的定义位于另一个类的内部&#xff0c;前者称为内部类&a…

mockito_吸收Mockito的流利度

mockito我最近发现自己编写了一些代码来集成两个不同的平台。 这些系统之一是基于Java的系统&#xff0c;而另一个虽然不是用Java编写的&#xff0c;却提供了Java API。 我将这些系统分别称为Foo和Bar。 在我编写一行代码之前就很明显了&#xff0c;但是&#xff0c;测试最终…

Java异常处理(1)--异常概述与异常体系结构

在Java语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常) Java程序在执行过程中所发生的异常事件可分为两类&#xff1a; ①Error&#xff1a;Java虚拟机无法解决的严重问题。如&#xff1a;JVM系统内部错误、资源耗尽等…

Payara Micro在Oracle应用容器云上

在此博客文章中&#xff0c;我将介绍如何将打包在Payara Microber -jar中的CloudEE Duke应用程序部署到Oracle Application Container Cloud 。 在Oracle Application Container Cloud中进行部署所需的部署工件是一个ZIP归档文件&#xff0c;其中包含应用程序ber-jar和清单文件…

认知无线电matlab代码详解,认知无线电频谱感知之功率检测matlab代码.docx

认知无线电频谱感知之功率检测matlab代码能量检测仿真实验代码&#xff1a;clear all;clc;n 5;ps 1;SNR1 -5;SNR2 -8;SNR3 -10;% Sim_Times10000; %Monter-Carlo times% m5;T0.001;% 信号带宽W W5*10^4;% 采样频率Fs 2*W;m T*W;n 2*T*W;% F0W;% Fs2;% Sigsqrt(2)*sin(2…

Java异常处理(2)--异常处理机制及自定义异常

在编写程序时&#xff0c;经常要在可能出现错误的地方加上检测的代码&#xff0c;如进行x/y运算时&#xff0c;要检测分母为0&#xff0c;数据为空&#xff0c;输入的不是数据而是字符等。过多的if-else分支会导致程序的代码加长、臃肿&#xff0c;可读性差。因此采用异常处理机…

php index.php 文件路径,自研 PHP 框架 1.0_index.php 文件说明

index.php说明在服务上&#xff0c;PHP 引擎其实只执行了 index.php 这一个文件&#xff0c;index.php 可以抽象的看做是产品的最终型态&#xff0c;app 下的文件规定如何组装&#xff0c;system 下的文件提供基本的“组装零件”&#xff0c;最后拼装成一个完整的产品&#xff…

jaas_受JAAS保护的JAX-RS端点

jaas随着RESTFUL&#xff08;JAX-RS&#xff09;作为创建Web服务端点的“首选”方式的问世&#xff0c;很长一段时间以来&#xff0c;我一直想知道人们如何围绕它实现安全机制。 归根结底&#xff0c;我假设JAX-RS的基础实现是servlet&#xff0c;因此其安全性也可能围绕容器&…

Java多线程(1)--基本概念:程序、进程、线程

程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码&#xff0c;静态对象。 进程(process)是程序的一次执行过程&#xff0c;或是正在运行的一个程序&#xff0c;是一个动态的过程&#xff1a;有它自身的产生、存在和消亡的过程。——生命周…

php中return返回数组,PHP中return返回数组的一点用法

本文就学习中遇到的PHP函数return返回值的问题&#xff0c;这一点return用法进行了说明。在函数的内部用return返回一个值或者为空来结束函数的运行。但是在return一个数组的时候&#xff0c;也可以在函数的内部直接使用print_r来打印。但一般都不这么做。拿上一篇文章举例&…

Thread类的有关常用方法

线程优先级问题 start(): 启动线程&#xff0c;并执行对象的run()方法&#xff08;线程对象.start()&#xff09; run(): 线程在被调度时执行的操作&#xff08;线程对象.start()&#xff09; currentThread(): 返回当前线程&#xff0c;在Thread子类中就是this&#xff0c;通常…

Java中的Volatile如何工作? Java中的volatile关键字示例

如何在Java中使用Volatile关键字 在Java采访中&#xff0c;什么是volatile变量以及何时在Java中使用volatile变量是Java 采访中一个著名的多线程采访问题 。 尽管许多程序员都知道什么是volatile变量&#xff0c;但是他们在第二部分上失败了&#xff0c;即在Java中何处使用vol…