首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有方法将{"number1":5L,"number2":5L}反序列化到具有长字段的类?

是否有方法将{"number1":5L,"number2":5L}反序列化到具有长字段的类?
EN

Stack Overflow用户
提问于 2020-04-14 08:23:49
回答 1查看 118关注 0票数 1

当我反序列化JSON

代码语言:javascript
复制
{"number1":5L,"number2":5L}

对于具有class字段的long,我得到以下错误:

JsonParseException:意外字符('L‘):期望逗号分隔对象条目

怎么修呢?

EN

回答 1

Stack Overflow用户

发布于 2020-04-14 23:27:56

JSON有效负载无效。数字不能用字母L表示。见下表:

上面的图片来自json.org。要处理无效的JSON,我们需要为Long类实现自定义反序列化器:

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61203498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档