我有以下代码。
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的结尾出现了什么?
其实当解析器能够检测到JSON字符串的结尾时,它会忽略后面的任何内容。有些解析器给出了这个自动修复功能。
有一个问题在 jackson-databind 而那里的答复是
是的,这是设计上的问题。如果你想发现这样的问题,你需要构造JsonParser,并手动推进它。多个根级值的存在不被认为是一个有效性问题,但在你的情况下,没有匹配']'的端流会被发现。