在将json字符串反序列化为对象时,Jackson objectmapper会忽略json字符串末尾的附加"}"。

问题描述 投票:1回答:1

我有以下代码。

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 String的结尾出现了什么?

java json objectmapper jackson-databind
1个回答
1
投票

其实当解析器能够检测到JSON字符串的结尾时,它会忽略后面的任何内容。有些解析器给出了这个自动修复功能。

有一个问题在 jackson-databind 而那里的答复是

是的,这是设计上的问题。如果你想发现这样的问题,你需要构造JsonParser,并手动推进它。多个根级值的存在不被认为是一个有效性问题,但在你的情况下,没有匹配']'的端流会被发现。

© www.soinside.com 2019 - 2024. All rights reserved.