- 浏览: 260642 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
Java对象和JSON互转换利器-Gson .
2008-07-11 09:30 3182人阅读 评论(2) 收藏 举报
Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。
Gson User Guide
Gson: A library to convert Java Objects to JSON and vice-versa
Inderjeet Singh, Joel Leitch
Overview
Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson is an open-source project hosted at http://code.google.com/p/google-gson. Gson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of. Goals for Gson
•Provide easy to use mechanisms like toString() and constructor (factory method) to convert Java to JSON and vice-versa
•Allow pre-existing unmodifiable objects to be converted to and from JSON
•Allow custom representations for objects
•Support arbitrarily complex objects
Using Gson
The primary class to use is Gson which you can just create by calling new Gson(). There is also a class GsonBuilder available that can be used to create a Gson instance with various settings like version control and so on. The Gson instance does not maintain any state while invoking Json operations. So, you are free to reuse the same object for multiple Json serialization and deserialization operations.
Primitives Examples
(Serialization)
Gson gson = new Gson();
gson.toJson(1); ==> prints [1] gson.toJson("abcd"); ==> prints ["abcd"] gson.toJson(new Long(10)); ==> prints [10] int[] values = { 1 }; gson.toJson(values); ==> prints [1] (Deserialization)
int one = gson.fromJson("[1]", int.class); Integer one = gson.fromJson("1", Integer.class); Long one = gson.fromJson("[1]", Long.class); Boolean false = gson.fromJson("[false]", Boolean.class); String str = gson.fromJson("[/"abc/"]", String.class); String anotherStr = gson.fromJson("/"abc/"", String.class);
Object Examples
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc"; private transient int value3 = 3;
} (Serialization)
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);
==> json is {"value1":1,"value2":"abc"} Note that you can not serialize objects with circular references since that will result in infinite recursion. (Deserialization) BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class); ==> obj2 is just like obj
Finer Points with Objects
•It is perfectly fine (and recommended) to use private fields
•There is no need to use any annotations to indicate a field is to be included for serialization and deserialization. All fields in the current class (and from all super classes) are included by default.
•If a field is marked transient, (by default) it is ignored and not included in the JSON serialization or deserialization.
•This implementation handles nulls correctly
◦While serialization, a null field is skipped from the output
◦While deserialization, a missing entry in JSON results in setting the corresponding field in the object to null
•If a field is synthetic, it is ignored and not included in JSON serialization or deserialization
•Fields corresponding to the outer classes in inner classes, anonymous classes, and local classes are ignored and not included in serialization or deserialization
Array Examples
Gson gson = new Gson(); int[] ints = {1, 2, 3, 4, 5}; String[] strings = {"abc", "def", "ghi"}; (Serialization)
gson.toJson(ints); ==> prints [1,2,3,4,5]
gson.toJson(strings); ==> prints ["abc", "def", "ghi"]
(Deserialization)
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); ==> ints2 will be same as ints
We also support multi-dimensional arrays, with arbitrarily complex element types
Collections Examples
Gson gson = new Gson(); Collection<Integer> ints = Lists.immutableList(1,2,3,4,5); (Serialization) String json = gson.toJson(ints); ==> json is [1,2,3,4,5] (Deserialization)
Type collectionType = new TypeToken<Collection<Integer>>(){}.getType(); Collection<Integer> ints2 = gson.fromJson(collectionType, json); ints2 is same as ints Fairly hideous: note how we define the type of collection Unfortunately, no way to get around this in Java Collections Limitations
•Can serialize collection of arbitrary objects but can not deserialize from it
◦Because there is no way for the user to indicate the type of the resulting object
•While deserializing, Collection must be of a specific generic type
All of this makes sense, and is rarely a problem when following good Java coding practices
Built-in Serializers and Deserializers
Gson has built-in serializers and deserializers for commonly used classes whose default representation may be inappropriate. Here is a list of such classes:
1.java.net.URL to match it with strings like "http://code.google.com/p/google-gson/".
2.java.net.URI to match it with strings like "/p/google-gson/".
Custom Serialization and Deserialization
Sometimes default representation is not what you want. This is often the case when dealing with library classes (DateTime, etc). Gson allows you to register your own custom serializers and deserializers. This is done by defining two parts:
•Json Serialiers: Need to define custom serialization for an object
•Json Deserializers: Needed to define custom deserialization for a type
•Instance Creators: Not needed if no-args constructor is available
GsonBuilder gson = new GsonBuilder(); gson.registerTypeAdapter(MyType.class, new MySerializer());
gson.registerDeserializer(MyType.class, new MyDeserializer());
gson.registerInstanceCreator(MyType.class, new MyInstanceCreator());
Writing a Serializer
Here is an example of how to write a custom serializer for JodaTime DateTime class. private class DateTimeSerializer implements JsonSerializer<DateTime> { public JsonElement serialize(DateTime src, Type typeOfSrc, JsonSerializationContext context); new JsonPrimitive(src.toString()); } } Gson calls toJson() when it runs into a DateTime object during serialization.
Writing a Deserializer
Here is an example of how to write a custom deserializer for JodaTime DateTime class. private class DateTimeDeserializer implements JsonDeserializer<DateTime> { public DateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return new DateTime(json.getAsJsonPrimitive().getAsString()); } } Gson calls fromJson() when it needs to deserialize a JSON string fragment into a DateTime object Finer points with Serializers and Deserializers Often you want to register a single handler for all generic types corresponding to a raw type
•For example, suppose you have an "Id" class for Id representation/translation (i.e. an internal vs. external representation).
•Id<T> type that has same serialization for all generic types
◦Essentially write out the id value
•Deserialization is very similar but not exactly the same
◦Need to call "new Id(Class<T>, String)" which returns an instance of Id<T>
Gson supports registering a single handler for this. You can also register a specific handler for a specific generic type (say Id<RequiresSpecialHandling> needed special handling). The Type parameter for the toJson and fromJson contains the generic type information to help you write a single handler for all generic types corresponding to the same raw type
Writing an Instance Creator
While deserializing an Object, Gson needs to create a default instance of the class Well-behaved classes that are meant for serialization and deserialization should have a no-argument constructor
•Doesn't matter whether public or private
Typically, Instance Creators are needed when you are dealing with a library class that does NOT define a no-argument constructor Instance Creator Example private class MoneyInstanceCreator implements InstanceCreator<Money> {
public Money createInstance(Type type) {
return new Money("1000000", CurrencyCode.USD);
}
}
Type could be of a corresponding generic type
•Very useful to invoke constructors which need specific generic type information
•For example, if the Id class stores the class for which the Id is being created
Versioning Support
Multiple versions of the same object can be maintained by using @Since annotation. This annotation can be used on Classes, Fields and, in a future release, Methods.
JSON Field Naming Support
Gson supports some pre-defined field naming policies to convert the standard Java field names (i.e. camel cased names starting with lower case --- "sampleFieldNameInJava") to a Json field name (i.e. sample_field_name_in_java or SampleFieldNameInJava). It also has an annotation based strategy to allows clients to define custom names on a per field basis. Note, that the annotation based strategy has field name validation which will raise "Runtime" exceptions if invalid field name are provided as the annotation value. The following is an example of how to use both Gson naming policy features: private class SomeObject { @SerializedName("custom_naming") private final String someField; private final String someOtherField; public SomeObject(String a, String b) { this.someField = a; this.someOtherField = b; } }
SomeObject someObject = new SomeObject("first", "second");
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
String jsonRepresentation = gson.toJson(someObject);
System.out.println(jsonRepresentation);
======== OUTPUT ========
{"custom_naming":"first","SomeOtherField":"second"}
Issues in Designing Gson
See the Gson design document for a discussion of issues we faced while designing Gson. It also include a comparison of Gson with other Java libraries that can be used for Json conversion.
Future Enhancements to Gson
For the latest list of proposed enhancements and to suggest new ones, see the Issues section under the project website.
•Support JavaBeans properties alongwith fields
•For Objects with circular dependency, need to explore an alternate strategy instead of throwing error. For example, may be print null, or an id-ref kind of thing
•More strict validation
•Clean up String serialization and deserialization and make it use a custom Serializers and Deserializers
2008-07-11 09:30 3182人阅读 评论(2) 收藏 举报
Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。
Gson User Guide
Gson: A library to convert Java Objects to JSON and vice-versa
Inderjeet Singh, Joel Leitch
Overview
Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson is an open-source project hosted at http://code.google.com/p/google-gson. Gson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of. Goals for Gson
•Provide easy to use mechanisms like toString() and constructor (factory method) to convert Java to JSON and vice-versa
•Allow pre-existing unmodifiable objects to be converted to and from JSON
•Allow custom representations for objects
•Support arbitrarily complex objects
Using Gson
The primary class to use is Gson which you can just create by calling new Gson(). There is also a class GsonBuilder available that can be used to create a Gson instance with various settings like version control and so on. The Gson instance does not maintain any state while invoking Json operations. So, you are free to reuse the same object for multiple Json serialization and deserialization operations.
Primitives Examples
(Serialization)
Gson gson = new Gson();
gson.toJson(1); ==> prints [1] gson.toJson("abcd"); ==> prints ["abcd"] gson.toJson(new Long(10)); ==> prints [10] int[] values = { 1 }; gson.toJson(values); ==> prints [1] (Deserialization)
int one = gson.fromJson("[1]", int.class); Integer one = gson.fromJson("1", Integer.class); Long one = gson.fromJson("[1]", Long.class); Boolean false = gson.fromJson("[false]", Boolean.class); String str = gson.fromJson("[/"abc/"]", String.class); String anotherStr = gson.fromJson("/"abc/"", String.class);
Object Examples
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc"; private transient int value3 = 3;
} (Serialization)
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);
==> json is {"value1":1,"value2":"abc"} Note that you can not serialize objects with circular references since that will result in infinite recursion. (Deserialization) BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class); ==> obj2 is just like obj
Finer Points with Objects
•It is perfectly fine (and recommended) to use private fields
•There is no need to use any annotations to indicate a field is to be included for serialization and deserialization. All fields in the current class (and from all super classes) are included by default.
•If a field is marked transient, (by default) it is ignored and not included in the JSON serialization or deserialization.
•This implementation handles nulls correctly
◦While serialization, a null field is skipped from the output
◦While deserialization, a missing entry in JSON results in setting the corresponding field in the object to null
•If a field is synthetic, it is ignored and not included in JSON serialization or deserialization
•Fields corresponding to the outer classes in inner classes, anonymous classes, and local classes are ignored and not included in serialization or deserialization
Array Examples
Gson gson = new Gson(); int[] ints = {1, 2, 3, 4, 5}; String[] strings = {"abc", "def", "ghi"}; (Serialization)
gson.toJson(ints); ==> prints [1,2,3,4,5]
gson.toJson(strings); ==> prints ["abc", "def", "ghi"]
(Deserialization)
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); ==> ints2 will be same as ints
We also support multi-dimensional arrays, with arbitrarily complex element types
Collections Examples
Gson gson = new Gson(); Collection<Integer> ints = Lists.immutableList(1,2,3,4,5); (Serialization) String json = gson.toJson(ints); ==> json is [1,2,3,4,5] (Deserialization)
Type collectionType = new TypeToken<Collection<Integer>>(){}.getType(); Collection<Integer> ints2 = gson.fromJson(collectionType, json); ints2 is same as ints Fairly hideous: note how we define the type of collection Unfortunately, no way to get around this in Java Collections Limitations
•Can serialize collection of arbitrary objects but can not deserialize from it
◦Because there is no way for the user to indicate the type of the resulting object
•While deserializing, Collection must be of a specific generic type
All of this makes sense, and is rarely a problem when following good Java coding practices
Built-in Serializers and Deserializers
Gson has built-in serializers and deserializers for commonly used classes whose default representation may be inappropriate. Here is a list of such classes:
1.java.net.URL to match it with strings like "http://code.google.com/p/google-gson/".
2.java.net.URI to match it with strings like "/p/google-gson/".
Custom Serialization and Deserialization
Sometimes default representation is not what you want. This is often the case when dealing with library classes (DateTime, etc). Gson allows you to register your own custom serializers and deserializers. This is done by defining two parts:
•Json Serialiers: Need to define custom serialization for an object
•Json Deserializers: Needed to define custom deserialization for a type
•Instance Creators: Not needed if no-args constructor is available
GsonBuilder gson = new GsonBuilder(); gson.registerTypeAdapter(MyType.class, new MySerializer());
gson.registerDeserializer(MyType.class, new MyDeserializer());
gson.registerInstanceCreator(MyType.class, new MyInstanceCreator());
Writing a Serializer
Here is an example of how to write a custom serializer for JodaTime DateTime class. private class DateTimeSerializer implements JsonSerializer<DateTime> { public JsonElement serialize(DateTime src, Type typeOfSrc, JsonSerializationContext context); new JsonPrimitive(src.toString()); } } Gson calls toJson() when it runs into a DateTime object during serialization.
Writing a Deserializer
Here is an example of how to write a custom deserializer for JodaTime DateTime class. private class DateTimeDeserializer implements JsonDeserializer<DateTime> { public DateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return new DateTime(json.getAsJsonPrimitive().getAsString()); } } Gson calls fromJson() when it needs to deserialize a JSON string fragment into a DateTime object Finer points with Serializers and Deserializers Often you want to register a single handler for all generic types corresponding to a raw type
•For example, suppose you have an "Id" class for Id representation/translation (i.e. an internal vs. external representation).
•Id<T> type that has same serialization for all generic types
◦Essentially write out the id value
•Deserialization is very similar but not exactly the same
◦Need to call "new Id(Class<T>, String)" which returns an instance of Id<T>
Gson supports registering a single handler for this. You can also register a specific handler for a specific generic type (say Id<RequiresSpecialHandling> needed special handling). The Type parameter for the toJson and fromJson contains the generic type information to help you write a single handler for all generic types corresponding to the same raw type
Writing an Instance Creator
While deserializing an Object, Gson needs to create a default instance of the class Well-behaved classes that are meant for serialization and deserialization should have a no-argument constructor
•Doesn't matter whether public or private
Typically, Instance Creators are needed when you are dealing with a library class that does NOT define a no-argument constructor Instance Creator Example private class MoneyInstanceCreator implements InstanceCreator<Money> {
public Money createInstance(Type type) {
return new Money("1000000", CurrencyCode.USD);
}
}
Type could be of a corresponding generic type
•Very useful to invoke constructors which need specific generic type information
•For example, if the Id class stores the class for which the Id is being created
Versioning Support
Multiple versions of the same object can be maintained by using @Since annotation. This annotation can be used on Classes, Fields and, in a future release, Methods.
JSON Field Naming Support
Gson supports some pre-defined field naming policies to convert the standard Java field names (i.e. camel cased names starting with lower case --- "sampleFieldNameInJava") to a Json field name (i.e. sample_field_name_in_java or SampleFieldNameInJava). It also has an annotation based strategy to allows clients to define custom names on a per field basis. Note, that the annotation based strategy has field name validation which will raise "Runtime" exceptions if invalid field name are provided as the annotation value. The following is an example of how to use both Gson naming policy features: private class SomeObject { @SerializedName("custom_naming") private final String someField; private final String someOtherField; public SomeObject(String a, String b) { this.someField = a; this.someOtherField = b; } }
SomeObject someObject = new SomeObject("first", "second");
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
String jsonRepresentation = gson.toJson(someObject);
System.out.println(jsonRepresentation);
======== OUTPUT ========
{"custom_naming":"first","SomeOtherField":"second"}
Issues in Designing Gson
See the Gson design document for a discussion of issues we faced while designing Gson. It also include a comparison of Gson with other Java libraries that can be used for Json conversion.
Future Enhancements to Gson
For the latest list of proposed enhancements and to suggest new ones, see the Issues section under the project website.
•Support JavaBeans properties alongwith fields
•For Objects with circular dependency, need to explore an alternate strategy instead of throwing error. For example, may be print null, or an id-ref kind of thing
•More strict validation
•Clean up String serialization and deserialization and make it use a custom Serializers and Deserializers
发表评论
-
Java程序员常用工具集
2012-05-23 14:30 947我发现很多人没办 ... -
基于JDBC的数据库连接池技术研究与设计
2011-12-16 14:34 733基于JDBC的数据库连接池技术研究与设计 摘 要 本文 ... -
关于jvm的设置
2011-12-16 10:38 1456一、Java heap space (一 ... -
JVM内存管理深入Java内存区域与OOM
2011-12-15 16:47 869JVM内存管理深入Java内存 ... -
JVM内存管理深入垃圾收集器与内存分配策略
2011-12-15 16:45 1090JVM内存管理深入垃圾收 ... -
jdbc 连接池小结
2011-12-15 16:43 852java基础面试题 主题:[我的工具箱] jXLS ... -
JVM参数调优
2011-12-15 14:35 780JVM参数调优是个很头痛 ... -
java.lang.OutOfMemoryError: PermGen space及其解决方法
2011-10-26 17:52 777java.lang.OutOfMemoryError: Per ... -
java.sql.Date,java.sql.Time和java.sql.Timestamp
2011-09-06 14:11 1071java.sql.Date,java.sql.Time和jav ... -
java 编码
2011-07-21 19:13 1220w.write(new String("中文网&qu ... -
对泛型进行反射
2011-05-05 19:06 1195对泛型进行反射 今天在用反射的时候突然想到,之前从来没有对泛 ... -
Java反射经典实例 Java Reflection Cookbook
2011-05-05 19:05 738Java反射经典实例 Java Reflection Cook ... -
java 反射机制详解
2011-05-05 19:04 668java 反射机制详解 Java 的反射机制是使其具有动态特性 ... -
一次Java垃圾收集调优实战
2011-05-05 19:03 724一次Java垃圾收集调优实战 1 资料 * JDK5 ... -
利用反射和泛型让JDBC编程方便点
2011-05-05 19:02 805利用反射和泛型让JDBC编程方便点 一直以来使用JDBC编 ... -
利用反射取得泛型信息
2011-05-05 18:22 608利用反射取得泛型信息 一、传统通过反射取得函数的参数和返回值 ... -
深入剖析JAVA反射机制强大功能
2011-04-08 20:47 839* 深入剖 ... -
关于Java反射机制的一个实例
2011-04-08 20:46 797* 关于Java反射机制的一个实例 ... -
Java虚拟机内部构成浅析
2011-04-08 20:44 770* Java虚拟 ... -
详解reflect Java的反射机制
2011-04-08 20:42 503* 详解refle ...
相关推荐
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。 Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 ...
google-gson-2.2.4.zip
被大多数开发者所使用的java操作json的类库,成熟,简单。
feign-gson-9.5.1feign-gson-9.5.1 feign-gson-9.5.1feign-gson-9.5.1feign-gson-9.5.1
google-json-gson-master,google的jsonjar包,提供json方法。
google-gson-2.2.2解析xml
json-gson-fastJson的jar包
google-gson-2.2.4,google-gson-2.2.4
Java对象和Json对象互转采购的Gson方式所需要的jar包,内容包含四个所需要的jar包,解压后直接复制到项目的web-inf下的lib文件夹下,右键导入到项目中即可使用
Retrofit数据类型转换工具包 converter-gson-2.3.0.jar converter-gson-2.3.0.jar
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。 java对象或者list转换为json字符串
dom4j-json-Gson完整jar包下载
converter-gson-2.0.0-beta2_.jar
Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。 Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象到JSON 2) from...
converter-gson-2.1.0.jar包
google-gson-2.2.4-api,This package provides the Gson class to convert Json to Java and vice-versa.
gson.jar是Google开发的Java API,用于转换Java对象和Json对象,被用来处理Java和JSON对象的转换,可以调用默认构造器,给大家提供的是最新的gson-2.7.jar,有需要的赶快下载吧!
gson2.7 下载即可使用 GSON是Google开发的Java API,用于转换Java对象和Json对象