gpt4 book ai didi

java - 如何在反序列化 JSON 响应时使用 Gson 处理 NumberFormatException

转载 作者:IT老高 更新时间:2023-10-28 12:46:26 26 4
gpt4 key购买 nike

我正在读取带有 Gson 的 JSON 响应,它有时会返回 NumberFormatException,因为预期的 int 值设置为空字符串。现在我想知道处理这种异常的最佳方法是什么。如果该值为空字符串,则反序列化应为 0。

预期的 JSON 响应:

{
"name" : "Test1",
"runtime" : 90
}

但有时运行时是一个空字符串:

{
"name" : "Test2",
"runtime" : ""
}

java 类如下所示:

public class Foo
{
private String name;
private int runtime;
}

反序列化是这样的:

String input = "{\n" +
" \"name\" : \"Test\",\n" +
" \"runtime\" : \"\"\n" +
"}";

Gson gson = new Gson();
Foo foo = gson.fromJson(input, Foo.class);

抛出 com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String 因为返回的是空字符串而不是 int 值。

有没有办法告诉Gson,“如果你反序列化Type Foo的字段runtime并且有NumberFormatException,就返回默认值0"?

我的解决方法是使用 String 作为 runtime 字段的类型而不是 int,但也许有更好的方法处理此类错误。

最佳答案

这是我为 Long 类型制作的示例。这是一个更好的选择:

public class LongTypeAdapter extends TypeAdapter<Long> {

@Override
public Long read(JsonReader reader) throws IOException {
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return null;
}
String stringValue = reader.nextString();
try {
Long value = Long.valueOf(stringValue);
return value;
} catch (NumberFormatException e) {
return null;
}
}

@Override
public void write(JsonWriter writer, Long value) throws IOException {
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
}

使用 Gson 注册一个适配器 util:

Gson gson = new GsonBuilder().registerTypeAdapter(Long.class, new LongTypeAdapter()).create();

您可以引用this link了解更多。

关于java - 如何在反序列化 JSON 响应时使用 Gson 处理 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8863429/

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