当我反序列化JSON时
{"number1":5L,"number2":5L}对于具有class字段的long,我得到以下错误:
JsonParseException:意外字符('L‘):期望逗号分隔对象条目
怎么修呢?
发布于 2020-04-14 23:27:56
JSON有效负载无效。数字不能用字母L表示。见下表:

上面的图片来自json.org。要处理无效的JSON,我们需要为Long类实现自定义反序列化器:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.deser.std.NumberDeserializers;
import java.io.File;
import java.io.IOException;
import java.util.StringJoiner;
public class JsonPathApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
Id id = mapper.readValue(jsonFile, Id.class);
System.out.println(id);
}
}
class LongJsonDeserializer extends JsonDeserializer<Long> {
private final NumberDeserializers.LongDeserializer longDeserializer = new NumberDeserializers.LongDeserializer(Long.TYPE, 0L);
@Override
public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
Long value = longDeserializer.deserialize(p, ctxt);
goToNextTokenSilently(p);
return value;
}
private void goToNextTokenSilently(JsonParser p) {
try {
p.nextToken();
} catch (Exception e) {
//log if needed
}
}
}
class Id {
@JsonDeserialize(using = LongJsonDeserializer.class)
private Long number1;
@JsonDeserialize(using = LongJsonDeserializer.class)
private Long number2;
// getters, setters, toString
}https://stackoverflow.com/questions/61203498
复制相似问题