JsonMappingException(JSON格式化异常)

在现在的日常开发中,不管前端还是后端,JSON 格式的数据是用得比较多的,甚至可以说无处不在。

JsonMappingException是Jackson库中的异常,表示在将JSON数据映射到Java对象时发生了错误。

JsonMappingException通常有几种可能的原因:

1.JSON数据格式错误:

如果JSON数据格式不正确,例如缺少必需字段,数据类型不匹配等,将导致JsonMappingException。

JSON数值
JSON字符串
JSON数组
JSON对象
JSON对象数组
JSON数组对象

2.Java对象与JSON数据不匹配:

如果将JSON数据映射到Java对象时,存在字段名称或类型不匹配的情况,也会引发JsonMappingException。

Java对象与JSON数据的转化:主流的转化工具有很多,一般项目中建议只选其中一种,目前好评最多的感觉就是 Jackson 了。ObjectMapper objectMapper = new ObjectMapper();

将 JSON 字符串 转成 Java 对象

使用 readValue方法,第一个参数是 JSON 字符串,第二个参数是转化的目标类的类型 

Game game = objectMapper.readValue(jsonStr, Game.class);

将 Java 对象转成 JSON 字符串

使用 writeValueAsString 方法,接受一个 Java 对象,返回一个 JSON 字符串。

String gameJson = objectMapper.writeValueAsString(game);

 将 List 转成 JSON 字符串                                                     

使用 writeValueAsString 方法

String gameListJson = objectMapper.writeValueAsString(gameList);

将 JSON 字符串 转成 List

使用 readValue 方法    第一个参数是 JSON 字符串,第二个参数是转化的目标 TypeReference(类型参照)对象,这里指定其泛型为 List

List gameListFromJson = objectMapper.readValue(gameListJson, new TypeReference>() {});

3.缺少必需的库依赖:

Spring Boot支持的三个JSON库(Gson、Jackson、JSON-B)中,Jackson是首选默认库。如果在使用Jackson库时缺少必需的库依赖,也可能导致JsonMappingException。1.x版本使用的是codehaus的库,2.0之后改成fasterxml,建议使用2.0以后的版本。



    org.codehaus.jackson
    jackson-core-asl
    1.9.13


    org.codehaus.jackson
    jackson-mapper-asl
    1.9.13

 

    com.fasterxml.jackson.core
    jackson-core
    2.12.0


    com.fasterxml.jackson.core
    jackson-databind
    2.12.0


    com.fasterxml.jackson.core
    jackson-annotations
    2.12.0

解决JsonMappingException的方法包括:

1.检查JSON数据的格式是否正确,确保每个字段的值与期望的数据类型一致。

2.检查Java对象的定义与JSON数据的结构是否匹配,包括字段名称类型

3.确保程序中包含Jackson库的依赖,并升级到最新版本以解决潜在的Bug。

4.添加异常处理机制,捕获JsonMappingException并进行适当的处理或错误提示。

5.使用Jackson库提供的注解,如@JsonProperty等,来指定Java对象字段与JSON数据字段的映射关系。

你可能感兴趣的:(json)