Gson用法详解
来源:互联网 发布:香港买家淘宝怎么发货 编辑:程序博客网 时间:2024/06/05 21:59
1 基本用法
假设有对象pojo,如下:
然后是转换为JSON以及对JSON的反向转换:
输出:
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) 如果是对于泛型的
则要使用:
Type collectionType =new TypeToken<{ generic-object-with-type-information }>(){}.getType();
比如:
使用方法:
3 如果不希望有某些属性,则使用transient屏蔽,如:
transient int val;
4 介绍一下如何输出漂亮的json格式,因为默认的输出是compact格式,就是比如:
{"name":"ajduke","languagesKnown":["Java","Scala","Ruby"]}
可以使用如下的方式输出漂亮格式的:
就是setPrettyPrinting选项了,输出的格式为:
******* Pretty formatting *********
{
"name": "ajduke",
"languagesKnown": [
"Java",
"Scala",
"Ruby"
]
}
5 把null值也转换,默认是不转换null值的,可以选择也转换,比如
则:
输出:
Default behaviour
{
"name": "ajduke",
"languagesKnown": [
"Java",
"Scala",
"Ruby"
]
}
Including the nulls
{
"name": "ajduke",
"classz": null,
"languagesKnown": [
"Java",
"Scala",
"Ruby"
]
}
6 输出的json使用另外一个名字,默认转换出来的json中和对象的字段是一样的,当然也
可以设置成不同,使用注解
@SerializedName("firstName")
private String name;
则指定了别名
7 可以输出到流
8 使用@Since注解去维护版本,比如你有一个REST的API,并且有多个版本的JSON,如果下一个版本JSON中增加了字段,但又不希望所有的版本都在使用这些字段的话,就可以使用,比如:
输出为:
Output for version 2.0...
{"field":"field","newField1":"field 1","newField2":"field 2"}
Output for version 1.0...
{"field":"field","newField1":"field 1"}
Output for No version set...
{"field":"field","newField1":"field 1","newField2":"field 2"}
9 HTML的转换
默认是GSON把HTML 转义的,但也可以设置不转义,比如:
输出:
Normal behaviour...
"\u003cmyval\u003e"
Disabled html escaping...
"<myval>"
10 指定某些修饰符,比如private等不输出为json,比如:
GsonBuilder excludeFieldsWithModifiers = gsonBuilder
.excludeFieldsWithModifiers(Modifier.PRIVATE);
Gson create = excludeFieldsWithModifiers.create();
String json2 = create.toJson(new Developer());
当然也可以将要输出字段用@Expose去注解输出:
11甚至可以指定将原来对象的字段,输出成什么样的JSON,比如全部转换为小写,并用空格或者下划线分隔
比如:
输出:
Default behaviour....
{"myField":"value1","myAnotherField":"value2"}
Fields with lower case and dashes...
{"my-field":"value1","my-another-field":"value2"}
Fields with lower case and dashes...
{"My Field":"value1","My Another Field":"value2"}
假设有对象pojo,如下:
- 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;
- }
- @Override
- public String toString() {
- return "ModelObject [name=" + name + ",
- val=" + val + ", status="
- + status + ", f=" + f + "]";
- }
- 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;
- }
- @Override
- public String toString() {
- return "ModelObject [name=" + name + ",
- val=" + val + ", status="
- + status + ", f=" + f + "]";
- }
然后是转换为JSON以及对JSON的反向转换:
- final Gson gson = new Gson();
- ModelObject modelObject = new ModelObject("myname", 12, true, 2.3);
- System.out.println("toJson ---");
- System.out.println("Original Java object : " + modelObject);
- String json = gson.toJson(modelObject);
- System.out.println("Converted JSON string is : " + json);
- System.out.println("fromJson----");
- System.out.println("Original JSON string is : " + json);
- ModelObject modelObject1 = gson.fromJson(json, ModelObject.class);
- System.out.println("Converted Java object : " + modelObject1);
- final Gson gson = new Gson();
- ModelObject modelObject = new ModelObject("myname", 12, true, 2.3);
- System.out.println("toJson ---");
- System.out.println("Original Java object : " + modelObject);
- String json = gson.toJson(modelObject);
- System.out.println("Converted JSON string is : " + json);
- System.out.println("fromJson----");
- System.out.println("Original JSON string is : " + json);
- ModelObject modelObject1 = gson.fromJson(json, ModelObject.class);
- System.out.println("Converted Java object : " + modelObject1);
输出:
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) 如果是对于泛型的
则要使用:
Type collectionType =new TypeToken<{ generic-object-with-type-information }>(){}.getType();
比如:
- public class GenericModel<T> {
- T value;
- public GenericModel(T value) {
- super();
- this.value = value;
- }
- @Override
- public String toString() {
- return "Model2 [value=" + value + "]";
- }
- }
- public class GenericModel<T> {
- T value;
- public GenericModel(T value) {
- super();
- this.value = value;
- }
- @Override
- public String toString() {
- return "Model2 [value=" + value + "]";
- }
- }
使用方法:
- Gson gson = new Gson();
- System.out.println("A generic object demo");
- GenericModel<Integer> model = new GenericModel<>(12);
- String json = gson.toJson(model);
- System.out.println("json representation :" + json);
- 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");
- List<String> listOfString = new ArrayList<>();
- listOfString.add("ajduke");
- listOfString.add("ajduchess");
- 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);
- Gson gson = new Gson();
- System.out.println("A generic object demo");
- GenericModel<Integer> model = new GenericModel<>(12);
- String json = gson.toJson(model);
- System.out.println("json representation :" + json);
- 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");
- List<String> listOfString = new ArrayList<>();
- listOfString.add("ajduke");
- listOfString.add("ajduchess");
- 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);
3 如果不希望有某些属性,则使用transient屏蔽,如:
transient int val;
4 介绍一下如何输出漂亮的json格式,因为默认的输出是compact格式,就是比如:
{"name":"ajduke","languagesKnown":["Java","Scala","Ruby"]}
可以使用如下的方式输出漂亮格式的:
- GsonBuilder gsonBuilder = new GsonBuilder();
- Gson prettyGson = gsonBuilder.setPrettyPrinting().create();
- json = prettyGson.toJson(new Developer());
- GsonBuilder gsonBuilder = new GsonBuilder();
- Gson prettyGson = gsonBuilder.setPrettyPrinting().create();
- json = prettyGson.toJson(new Developer());
就是setPrettyPrinting选项了,输出的格式为:
******* Pretty formatting *********
{
"name": "ajduke",
"languagesKnown": [
"Java",
"Scala",
"Ruby"
]
}
5 把null值也转换,默认是不转换null值的,可以选择也转换,比如
- class Developer {
- private String name;
- private String classz;
- List<String> languagesKnown;
- public Developer() {
- name = "ajduke";
- languagesKnown = new ArrayList<>();
- languagesKnown.add("Java");
- languagesKnown.add("Scala");
- languagesKnown.add("Ruby");
- }
- }
- class Developer {
- private String name;
- private String classz;
- List<String> languagesKnown;
- public Developer() {
- name = "ajduke";
- languagesKnown = new ArrayList<>();
- languagesKnown.add("Java");
- languagesKnown.add("Scala");
- languagesKnown.add("Ruby");
- }
- }
则:
- Gson gson = new Gson();
- System.out.println("Default behaviour ");
- GsonBuilder gsonBuilder = new GsonBuilder();
- Gson prettyGson = gsonBuilder.setPrettyPrinting().create();
- String json = prettyGson.toJson(new Developer());
- System.out.println(json);
- System.out.println("Including the nulls ");
- Gson includeNullsGson = gsonBuilder.serializeNulls().create();
- String json2 = includeNullsGson.toJson(new Developer());
- System.out.println(json2);
- Gson gson = new Gson();
- System.out.println("Default behaviour ");
- GsonBuilder gsonBuilder = new GsonBuilder();
- Gson prettyGson = gsonBuilder.setPrettyPrinting().create();
- String json = prettyGson.toJson(new Developer());
- System.out.println(json);
- System.out.println("Including the nulls ");
- Gson includeNullsGson = gsonBuilder.serializeNulls().create();
- String json2 = includeNullsGson.toJson(new Developer());
- System.out.println(json2);
输出:
Default behaviour
{
"name": "ajduke",
"languagesKnown": [
"Java",
"Scala",
"Ruby"
]
}
Including the nulls
{
"name": "ajduke",
"classz": null,
"languagesKnown": [
"Java",
"Scala",
"Ruby"
]
}
6 输出的json使用另外一个名字,默认转换出来的json中和对象的字段是一样的,当然也
可以设置成不同,使用注解
@SerializedName("firstName")
private String name;
则指定了别名
7 可以输出到流
- Gson gson = new Gson();
- System.out.println("Writing JSON to file ....");
- try (FileWriter writer = new FileWriter("d:/output.json")) {
- gson.toJson(new Developer(), writer); // writing to file
- }
- Gson gson = new Gson();
- System.out.println("Writing JSON to file ....");
- try (FileWriter writer = new FileWriter("d:/output.json")) {
- gson.toJson(new Developer(), writer); // writing to file
- }
8 使用@Since注解去维护版本,比如你有一个REST的API,并且有多个版本的JSON,如果下一个版本JSON中增加了字段,但又不希望所有的版本都在使用这些字段的话,就可以使用,比如:
- public class Example33 {
- public static void main(String[] args) {
- Gson gson = new GsonBuilder().setVersion(2.0).create();
- String json = gson.toJson(new ExampleClass());
- System.out.println("Output for version 2.0...");
- System.out.println(json);
- gson= new GsonBuilder().setVersion(1.0).create();
- json = gson.toJson(new ExampleClass());
- System.out.println("\nOutput for version 1.0...");
- System.out.println(json);
- gson= new Gson();
- json = gson.toJson(new ExampleClass());
- System.out.println("\nOutput for No version set...");
- System.out.println(json);
- }
- }
- class ExampleClass{
- String field= "field";
- // this is in version 1.0
- @Since(1.0) String newField1 = "field 1";
- // following will be included in the version 1.1
- @Since(2.0) String newField2 = "field 2";
- }
- public class Example33 {
- public static void main(String[] args) {
- Gson gson = new GsonBuilder().setVersion(2.0).create();
- String json = gson.toJson(new ExampleClass());
- System.out.println("Output for version 2.0...");
- System.out.println(json);
- gson= new GsonBuilder().setVersion(1.0).create();
- json = gson.toJson(new ExampleClass());
- System.out.println("\nOutput for version 1.0...");
- System.out.println(json);
- gson= new Gson();
- json = gson.toJson(new ExampleClass());
- System.out.println("\nOutput for No version set...");
- System.out.println(json);
- }
- }
- class ExampleClass{
- String field= "field";
- // this is in version 1.0
- @Since(1.0) String newField1 = "field 1";
- // following will be included in the version 1.1
- @Since(2.0) String newField2 = "field 2";
- }
输出为:
Output for version 2.0...
{"field":"field","newField1":"field 1","newField2":"field 2"}
Output for version 1.0...
{"field":"field","newField1":"field 1"}
Output for No version set...
{"field":"field","newField1":"field 1","newField2":"field 2"}
9 HTML的转换
默认是GSON把HTML 转义的,但也可以设置不转义,比如:
- public class Example34 {
- public static void main(String[] args) {
- String str ="<myval>";
- Gson gson = new Gson();
- System.out.println("Normal behaviour...");
- System.out.println(gson.toJson(str));
- System.out.println("\nDisabled html escaping...");
- gson = new GsonBuilder().disableHtmlEscaping().create();
- System.out.println(gson.toJson(str));
- }
- }
- public class Example34 {
- public static void main(String[] args) {
- String str ="<myval>";
- Gson gson = new Gson();
- System.out.println("Normal behaviour...");
- System.out.println(gson.toJson(str));
- System.out.println("\nDisabled html escaping...");
- gson = new GsonBuilder().disableHtmlEscaping().create();
- System.out.println(gson.toJson(str));
- }
- }
输出:
Normal behaviour...
"\u003cmyval\u003e"
Disabled html escaping...
"<myval>"
10 指定某些修饰符,比如private等不输出为json,比如:
GsonBuilder excludeFieldsWithModifiers = gsonBuilder
.excludeFieldsWithModifiers(Modifier.PRIVATE);
Gson create = excludeFieldsWithModifiers.create();
String json2 = create.toJson(new Developer());
当然也可以将要输出字段用@Expose去注解输出:
11甚至可以指定将原来对象的字段,输出成什么样的JSON,比如全部转换为小写,并用空格或者下划线分隔
比如:
- public static void main(String[] args) {
- Gson gson = new Gson();
- String json = gson.toJson(new JsonClass());
- System.out.println("Default behaviour....");
- System.out.println(json);
- gson = new GsonBuilder().setFieldNamingPolicy(
- FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();
- json = gson.toJson(new JsonClass());
- System.out.println("\nFields with lower case with dashes...");
- System.out.println(json);
- gson = new GsonBuilder().setFieldNamingPolicy(
- FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES).create();
- json = gson.toJson(new JsonClass());
- System.out.println("\nFields with upper case with spaces...");
- System.out.println(json);
- }
- }
- class JsonClass {
- String myField = "value1";
- String myAnotherField = "value2";
- }
- public static void main(String[] args) {
- Gson gson = new Gson();
- String json = gson.toJson(new JsonClass());
- System.out.println("Default behaviour....");
- System.out.println(json);
- gson = new GsonBuilder().setFieldNamingPolicy(
- FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();
- json = gson.toJson(new JsonClass());
- System.out.println("\nFields with lower case with dashes...");
- System.out.println(json);
- gson = new GsonBuilder().setFieldNamingPolicy(
- FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES).create();
- json = gson.toJson(new JsonClass());
- System.out.println("\nFields with upper case with spaces...");
- System.out.println(json);
- }
- }
- class JsonClass {
- String myField = "value1";
- String myAnotherField = "value2";
- }
输出:
Default behaviour....
{"myField":"value1","myAnotherField":"value2"}
Fields with lower case and dashes...
{"my-field":"value1","my-another-field":"value2"}
Fields with lower case and dashes...
{"My Field":"value1","My Another Field":"value2"}
阅读全文
0 0
- Gson用法详解
- Gson用法详解
- JSONObject和Gson用法详解
- Gson用法
- Gson详解
- Gson详解
- Gson详解
- GSON详解
- GSON 详解
- Gson的简要用法
- Gson的基本用法
- Android Gson用法
- Android Gson用法
- gson常用用法小结
- Gson的简单用法
- Gson的用法
- Gson用法1
- gson常用用法小结
- Java集合----Collection工具类
- 超全面的JavaWeb笔记day01<HTML等>
- 将string类型转为其他类型的方法
- 字符串与数组的转化-含分隔符
- 超全面的JavaWeb笔记day02<CSS&JavaScript>
- Gson用法详解
- 采样率和采样大小
- 超全面的JavaWeb笔记day03<JS对象&函数>
- react多国语言——react-intl
- 从根本解决Android6.0权限检测问题 附demo
- 超全面的JavaWeb笔记day04<dom树等>
- 超全面的JavaWeb笔记day05<xml&dtd&jaxp>
- mac os环境安装需知
- TextView显示(不同大小的,颜色)富文本