java的gson方法,Java 使用Gson(com.google.code.gson)解析处理Json数据的方法及示例代码...

1、Gson的安装引用

1)通过Gradle引用dependencies {

implementation 'com.google.code.gson:gson:2.8.5'

}

2)通过Maven引用

com.google.code.gson

gson

2.8.5

2、Gson使用示例代码

1)基本数据类型示例// 序列化

Gson gson = new Gson();

gson.toJson(1); // ==> 1

gson.toJson("abcd"); // ==> "abcd"

gson.toJson(new Long(10)); // ==> 10

int[] values = { 1 };

gson.toJson(values); // ==> [1]

// 反序列化

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);

2)对象类型示例class BagOfPrimitives{

private int value1 = 1;

private String value2 = "abc";

private transient int value3 = 3;

BagOfPrimitives() {

// no-args constructor

}

}

// 序列化

BagOfPrimitives obj = new BagOfPrimitives();

Gson gson = new Gson();

String json = gson.toJson(obj);

// ==> json is {"value1":1,"value2":"abc"}

注意:不能使用循环引用序列化对象,因为这会导致无限递归。// 反序列化

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);

// ==> obj2 is just like obj

3)嵌套类(包括内部类)

Gson可以很容易地序列化静态嵌套类。

Gson还可以反序列化静态嵌套类。但是,Gson 不能自动反序列化纯内部类,

因为它们的no-args构造函数还需要对反序列化时不可用的包含Object的引用。

您可以通过使内部类静态或为其提供自定义InstanceCreator来解决此问题。示例代码:public class A{

public String a;

class B{

public String b;

public B(){

// No args constructor for B

}

}

}

注意:上述class B不能(默认情况下)使用Gson序列化。

{"b":"abc"}由于B类是一个内部类,Gson不能反序列化为B的实例。

如果它被定义为静态类B,那么Gson就能够反序列化字符串。

另一种解决方案是为B编写自定义实例创建器。public class InstanceCreatorForB implements InstanceCreator{

private final A a;

public InstanceCreatorForB(A a){

this.a = a;

}

public A.B createInstance(Type type){

return a.new B();

}

}

以上是可能的,但不推荐

4)数组示例Gson gson = new Gson();

int[] ints = {1, 2, 3, 4, 5};

String[] strings = {"abc", "def", "ghi"};

// 序列化

gson.toJson(ints); // ==> [1,2,3,4,5]

gson.toJson(strings); // ==> ["abc", "def", "ghi"]

// 反序列化

int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class);

// ==> ints2 will be same as ints

支持具有任意复杂元素类型的多维数组。

5)Collections示例Gson gson = new Gson();

Collection ints = Lists.immutableList(1,2,3,4,5);

// 序列化

String json = gson.toJson(ints); // ==> json is [1,2,3,4,5]

// 反序列化

Type collectionType = new TypeToken>(){}.getType();

Collection ints2 = gson.fromJson(json, collectionType);

// ==> ints2 is same as ints

6)序列化和反序列化泛型类型示例class Foo{

T value;

}

Gson gson = new Gson();

Foo foo = new Foo();

gson.toJson(foo); // May not serialize foo.value correctly

gson.fromJson(json, foo.getClass()); // Fails to deserialize foo.value as Bar

上面的代码无法将值解释为类型Bar,因为Gson调用list.getClass()获取其类信息,但此方法返回一个原始类,Foo.class。这意味着Gson无法知道这是一个类型的对象Foo,而不仅仅是普通的Foo。

您可以通过为泛型类型指定正确的参数化类型来解决此问题。您可以使用TypeToken该类来完成此操作;Type fooType = new TypeToken>() {}.getType();

gson.toJson(foo, fooType);

gson.fromJson(json, fooType);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值