二.Gson中的fromJson()实现反序列化
相当强大,不仅可以转基本类型,还可以把相应格式的字符串转为list或map
public static void main(String[] args) {
Gson gson = new Gson();
//1.将字符串转为int(在去掉双引号上感觉很强大)
int i = gson.fromJson("\"250\"", int.class);
System.out.println(i);
//2.将字符串转为double(在去掉双引号上感觉很强大)
double d = gson.fromJson("\"99.99\"", double.class);
System.out.println(d);
//3.将字符串转为boolean类型
boolean b = gson.fromJson("true", boolean.class);
System.out.println(b);
//4.将字符串转为字符串类型(在去掉双引号上感觉很强大,但也存在限制,
// 比如多个双引号时会报错)
System.out.println("\"String\"");
String str = gson.fromJson("\"String\"", String.class);
System.out.println(str);
System.out.println("\"I feel very \"good \"\"");
//输出 ; "I feel very "good ""
String str2 = gson.fromJson("\"I feel very \"good \"", String.class);
//报错 : com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException
// 5.将json格式的字符串转为map,但map中的value值如果还包含map格式或List型格式的值,则会被转换为
// class com.google.gson.internal.LinkedTreeMap或java.util.ArrayList,且之后下一级仍会被转换,而不
// 是简单地用字符串代替(很强大)
Map map = gson.fromJson("{\n" +
" \"date\":\"2019-02-25\",\n" +
" \"data\":[\n" +
" [\n" +
" {\n" +
" \"name\":\"why\",\n" +
" \"age\":18\n" +
" },\n" +
" {\n" +
" \"name\":\"xm\",\n" +
" \"age\":19\n" +
" }\n" +
" ],\n" +
" [\n" +
" {\n" +
" \"name\":\"xiaohong\",\n" +
" \"age\":20\n" +
" },\n" +
" {\n" +
" \"name\":\"xiaogou\",\n" +
" \"age\":21\n" +
" }\n" +
" ]\n" +
" ],\n" +
" \"school\":{\n" +
" \"address\":\"北京\",\n" +
" \"district\":\"昌平\"\n" +
" }\n" +
"}", Map.class);
System.out.println(map.get("school"));
//输出 : {address=北京, district=昌平}
System.out.println(map.get("school").getClass());
//输出 : class com.google.gson.internal.LinkedTreeMap
System.out.println(((Map) map.get("school")).get("address"));
//输出 : 北京
System.out.println(map.get("data"));
//输出 : [[{name=why, age=18.0}, {name=xm, age=19.0}], [{name=xiaohong, age=20.0}, {name=xiaogou, age=21.0}]]
System.out.println(map.get("data").getClass());
//输出 : class java.util.ArrayList
System.out.println(((List)map.get("data")).get(0));
//输出 : [{name=why, age=18.0}, {name=xm, age=19.0}]
System.out.println((((List)map.get("data")).get(0)).getClass());
//输出 : class java.util.ArrayList
System.out.println(((List)(((List)map.get("data")).get(0))).get(0).getClass());
//输出 : class com.google.gson.internal.LinkedTreeMap
//6.实体类字符串转实体类
String usrStr = "{\"hisName\":\"why\",\"hisAge\":18,\"hisWeight\":100.0}";
User usr = gson.fromJson(usrStr, User.class);
System.out.println(usr.getHisName());
//输出 : why
三.Gson中的toJson()实现序列化
1.将Object转为字符串,如果obj为json格式,某个key值为null,则不包含
public static String objectToString(Object obj) {
Gson gson = new Gson();
String jsonObject = gson.toJson(obj);
return jsonObject;
2.将Object转为字符串,如果obj为json格式,某个key值为null也包含
public static String objToStringIncludeNull(Object obj) {
GsonBuilder gsonBuilder = new GsonBuilder();
String jsonString = gsonBuilder.serializeNulls().create().toJson(obj);
return jsonString;
public static void main(String[] args) {
Map map = new HashMap();
map.put("name","why");
map.put("age","27");
map.put("sex",null);
map.put("address","");
System.out.println(map);
//输出 : {address=, sex=null, name=why, age=27}
System.out.println(map.toString());
//输出 : {address=, sex=null, name=why, age=27}
System.out.println(objectToString(map));
//输出 : {"address":"","name":"why","age":"27"}
System.out.println(objToStringIncludeNull(map));
//输出 : {"address":"","sex":null,"name":"why","age":"27"}
User user = new User();
user.setHisAge(18);
// 字符串没设置值的话会默认为null,数字没设置值得话默认为0
System.out.println(objectToString(user));
//输出 :{"hisAge":18,"hisWeight":0.0}
System.out.println(objToStringIncludeNull(user));
//输出 :{"hisName":null,"hisAge":18,"hisWeight":0.0}
一.Gson中的fromJson()实现反序列化相当强大,不仅可以转基本类型,还可以把相应格式的字符串转为list或map public static void main(String[] args) { Gson gson = new Gson(); //1.将字符串转为int(在去掉双引号上感觉很强大) int i = gson....
1. class TestObjectToJson {
2. private int data1 = 100;
3. private String data2 = "hello";
6. TestObjectToJson obj = new TestObjectToJson();
7. Gson gson = new Gson();
8. String json = gson.toJson(obj);
class TestObjectToJson {
private int data1 = 100;
private String data2 = "hello";
TestObjectToJson obj = new TestObjectToJson();
Gson gson = new Gson();
String json = gson.toJson(obj);
会输出 {"data1":100,"data2":"hello"}
2. fromJson() example
Java 代码 收藏代码
1. import com.google.gson.Gson;
3. class TestJsonFromObject {
4. private int data1;
5. private String data2;
8. String json = "{'data1':100,'data2':'hello'}";
9. Gson gson = new Gson();
10. TestJsonFromObject obj = gson.fromJson(json, TestJsonFromObject.class);
import com.google.gson.Gson;
class TestJsonFromObject {
private int data1;
private String data2;
String json = "{'data1':100,'data2':'hello'}";
Gson gson = new Gson();
TestJsonFromObject obj = gson.fromJson(json, TestJsonFromObject.class);
3. 将Java对象的属性转换成指定的JSON名字
Java 代码 收藏代码
1. import com.google.gson.FieldNamingPolicy;
2. import com.google.gson.Gson;
3. import com.google.gson.GsonBuilder;
4. import com.google.gson.annotations.SerializedName;
6. public class TestGson {
8. @SerializedName("first_field")
9. private String field1;
11. private String secondField;
13. public TestGson(String param1, String param2) {
14. field1 = param1;
15. secondField = param2;
16. }
17. }
19. TestGson obj = new TestGson("aaaa", "bbbbb");
20. Gson gson = new Gson
JSON 是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便;解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等
一、Gson的基本用法
Gson提供了fromJson() 和toJson() 两个直接用于解析和生成的方法,前者实现反序列化,后者实现了序列化;同时每个方法都提供了重载方法
1)基本数据...
在Gson类库有一个Gson类,这个Gson类提供了两个方法:toJson() 和fromJson(),我们主要就是调用这两个方法来分别实现序列化Java对象为JSON字符串和反序列化JSON字符串成Java对象。
通过代码示例来对Gson类的常用方法做一个简单介绍。
GSON使用概述
GSON弥补了JSON的许多不足的地方,在实际应用中更加适用于Java开发。在这里,我们主要讲解的是利用GSON来操作java对象和json数据之间的相互转换,包括了常见的对象序列化和反序列化的知识。
因为json有2种类型:
一种是对象,object -> {key:value,key:value,....
GSON完整包,包含三个jar包。
gson-2.2.4.jar GSON生成解析json数据的基本jar包;
gson-2.2.4-javadoc.jar GSON API介绍文档包;
gson-2.2.4-sources.jar GSON源码包。
下载一个玩玩吧!
JSON是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便。其重要性不言而喻。解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等。
http://json.org/json-zh.html
GSON完整包,包含三个jar包。
gson-2.8.0.jar GSON生成解析json数据的基本jar包;
gson-2.8.0-javadoc.jar GSON API介绍文档包;
gson-2.8.0-sources.jar GSON源码包。
Gson是谷歌提供的一个用于Java对象和JSON数据之间进行序列化和反序列化的库。下面列出了一些Gson常用方法:
1. toJson(Object obj):将Java对象转换成JSON字符串。
2. fromJson(String json, Class<T> classOfT):将JSON字符串转换成Java对象。
3. toJsonTree(Object obj):将Java对象转换成JsonElement对象。
4. toJson(JsonElement jsonElement):将JsonElement对象转换成JSON字符串。
5. fromJson(JsonElement json, Class<T> classOfT):将JsonElement对象转换成Java对象。
6. fromJson(Reader reader, Class<T> classOfT):将Reader对象中的JSON数据转换成Java对象。
7. fromJson(InputStream stream, Class<T> classOfT):将InputStream对象中的JSON数据转换成Java对象。
8. toJson(Object obj, Type typeOfSrc):将Java对象转换成JSON字符串,支持泛型。
9. fromJson(String json, Type typeOfT):将JSON字符串转换成Java对象,支持泛型。
10. toJson(JsonWriter writer, Object obj):将Java对象转换成JSON字符串,并输出到JsonWriter对象中。
11. fromJson(JsonReader reader, Type typeOfT):将JsonReader对象中的JSON数据转换成Java对象,支持泛型。
除此之外,Gson还提供了许多其他的方法和选项,如设置日期格式、忽略null字段等,可以根据具体需求进行使用。