【问题标题】:Jackson objectmapper ignores additional '}' at the end of json string while deserialising json string to objectJackson objectmapper在将json字符串反序列化为对象时忽略json字符串末尾的附加'}'
【发布时间】:2020-05-22 18:45:06
【问题描述】:

我有以下代码。

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;

public class MyClass {
    public static void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();
        String jsonString = "{\"name\":\"Mahesh\", \"age\":21}}";

        try{
            Student student = mapper.readValue(jsonString, Student.class);

            System.out.println(student);

            jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(student);

            System.out.println(jsonString);
        }
        catch (JsonParseException e) { e.printStackTrace();}
        catch (JsonMappingException e) { e.printStackTrace(); }
        catch (IOException e) { e.printStackTrace(); }
    }
}

class Student {
    private String name;
    private int age;
    public Student(){}
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String toString(){
        return "Student [ name: "+name+", age: "+ age+ " ]";
    }
}

如我们所见,我传递给mapper.readValue 的字符串是无效的json 字符串(末尾有额外的})。但是当我运行代码时,它会成功运行并给出以下输出。

Student [ name: Mahesh, age: 21 ]
{
  "name" : "Mahesh",
  "age" : 21
}

我是JsonParseException,但它没有抛出异常?

有谁知道为什么 ObjectMapper 在反序列化时会忽略 json 字符串末尾的附加 }

【问题讨论】:

    标签: java json objectmapper jackson-databind


    【解决方案1】:

    实际上,当解析器可以检测到 JSON 字符串的结尾时,它会忽略后面的任何内容。一些解析器提供了这种自动修复功能。

    jackson-databind 中提出了同样的问题,并且有回复

    是的。这是设计使然。如果你想捕捉这样的问题,你需要 要构造 JsonParser,请手动推进它。存在多个 根级值不被视为有效性问题,但在您的 在这种情况下,将捕获不匹配 ']' 的流结尾。

    【讨论】:

    • 你得到答案了吗?如果您有任何疑问,请告诉我
    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2016-03-06
    • 2014-01-04
    • 2020-02-03
    相关资源
    最近更新 更多