gpt4 book ai didi

java - Gson 自定义 byte[] 处理程序

转载 作者:行者123 更新时间:2023-12-02 13:17:34 28 4
gpt4 key购买 nike

我想要 byte[].class 到 JSON 到 B64。这是通过自定义适配器完成的。

但是,当我运行 test() 代码时,它仍保留在 B64 中,并且不会返回到 byte[]。

如何解决?

public static final Gson gson = new GsonBuilder().registerTypeHierarchyAdapter(byte[].class, new ByteArrayToBase64TypeAdapter()).create();

static class ByteArrayToBase64TypeAdapter implements JsonSerializer<byte[]>, JsonDeserializer<byte[]> {

public byte[] deserialize(JsonElement json, ProcessBuilder.Redirect.Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return Util.fromBase64(json.getAsString());
}

public JsonElement serialize(byte[] src, ProcessBuilder.Redirect.Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(Util.toBase64(src));
}

@Override
public JsonElement serialize(byte[] src, java.lang.reflect.Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(Util.toBase64(src));
}

@Override
public byte[] deserialize(JsonElement json, java.lang.reflect.Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return Util.fromBase64(json.getAsString());
}
}



private static void test(){
ArrayList test = new ArrayList();
test.add("hello");
test.add("world".getBytes());

final String json = Gson.gson.toJson(test);

System.out.println("json: " + json);

ArrayList from = Gson.gson.fromJson(json, ArrayList.class);
System.out.println("from: " + from);
for(int i = 0; i < from.size(); i++){
System.out.println("i: " + i + "\tclass: " + from.get(i).getClass() + "\tvalue: " + from.get(i));
}
}

系统输出:

json: ["hello","d29ybGQ\u003d"]
from: [hello, d29ybGQ=]
i: 0 class: class java.lang.String value: hello
i: 1 class: class java.lang.String value: d29ybGQ= //this should be in byte[].class

最佳答案

它如何知道这个特定的 JSON 字符串恰好来自 byte[]?解码时需要指定,例如

final byte[] bytes = "world".getBytes();
final String json = Gson.gson.toJson(bytes);
final byte[] bytes1 = Gson.gson.fromJson(json, byte[].class);

或者有一个带有 byte[] 字段的类。

关于java - Gson 自定义 byte[] 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43705509/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com