我使用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
1条答案
按热度按时间pbwdgjma1#
Gson不知道任何Vert.x类,比如
io.vertx.core.json.JsonArray
,所以它使用反射并访问它们的内部字段。这就是为什么您会在JSON数据中看到额外的属性map
和list
。要么只使用Gson类,要么只使用Vert.x类,但不要混合使用。Gson有相应的类
com.google.gson.JsonObject
和com.google.gson.JsonArray
。但是,Vert.x似乎默认使用Jackson,所以它的性能比Gson的性能差会让我有点惊讶。
如果您在一个单独的Stack Overflow问题中询问为什么Vert.x类的性能很差,并提供用于测量性能的代码,也许会很好。