如何使用google gson序列化和反序列化vert.x JsonObject和JsonArray

tct7dpnv  于 2023-08-05  发布在  Go
关注(0)|答案(1)|浏览(171)

我使用vertx,我需要使用eventbus从一个verticle传输数据到另一个verticle,所以为了加快这个过程,需要序列化和反序列化数据以保存内存,因为vertx将消息保持在队列中,并且将JsonObject转换为String的性能和时间比使用gson转换慢。下面是我的示例代码:

package com.test;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.ToNumberPolicy;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;

public class Test44
{
    private static Gson gson = new GsonBuilder()
            .setNumberToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE)
            .setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE)
            .create();

    public static void main(String[] args) throws Exception {

        var js = new JsonObject();

        js.put("test","dddd").put("aaa","dddd").put("res",new JsonObject().put("interface",new JsonArray().add("aaaa")));

        var s = gson.toJson(js);

        var d = gson.fromJson(s,JsonObject.class);

        System.out.println(d);
    }
}

字符串
在这我得到以下输出从上面的代码
{“test”:“dddd”,“aaa”:“dddd”,“res”:{“map”:{“interface”:{“list”:[“aaaa”]}但是当我从gson字符串中解码json时,我需要以下内容
{“test”:“dddd”,“aaa”:“dddd”,“res”:{“interface”:{[“aaaa”]}}
知道怎么做吗
我正在使用以下lib vertx-core 4.4.0和gson 2.10.1

pbwdgjma

pbwdgjma1#

Gson不知道任何Vert.x类,比如io.vertx.core.json.JsonArray,所以它使用反射并访问它们的内部字段。这就是为什么您会在JSON数据中看到额外的属性maplist
要么只使用Gson类,要么只使用Vert.x类,但不要混合使用。Gson有相应的类com.google.gson.JsonObjectcom.google.gson.JsonArray
但是,Vert.x似乎默认使用Jackson,所以它的性能比Gson的性能差会让我有点惊讶。
如果您在一个单独的Stack Overflow问题中询问为什么Vert.x类的性能很差,并提供用于测量性能的代码,也许会很好。

相关问题