【发布时间】:2022-01-18 00:31:11
【问题描述】:
将包含以“x”开头的字段的对象映射到org.json.JSONObject 和com.fasterxml.jackson.core.ObjectMapper 时会出现不同的结果:
JSONObject
{"one":"One"}
ObjectMapper
{"one":"One","xOne":"xOne"}
为什么JSONObject 不包含“xOne”字段?
public class Test {
private String one;
private String xOne;
public String getOne() {
return one;
}
public void setOne(String one) {
this.one = one;
}
public String getxOne() {
return xOne;
}
public void setxOne(String xOne) {
this.xOne = xOne;
}
@Override
public String toString() {
return "Test [one=" + one + ", xOne=" + xOne + "]";
}
}
public class PojoToJson {
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
Test test = new Test();
test.setOne("One");
test.setxOne("xOne");
JSONObject json = new JSONObject(test);
System.out.println("JSONObject o/p: " + json);
ObjectMapper mapper = new ObjectMapper();
String mapperString = mapper.writeValueAsString(test);
System.out.println("ObjectMapper o/p: " + mapperString);
}
}
这是我使用JSONObject 和ObjectMapper 的输出差异:
【问题讨论】:
-
getxOne()可能不会被视为吸气剂。请尝试重命名为getXOne()。 -
有趣...这些是自动生成的 setter 和 getter,如果您有超过 50 个变量,很难手动完成。
-
@gwell 成功了...您可能希望将您的评论转化为答案
-
@gwell 所以这里的结论是 ObjectMapper 正在检查不区分大小写的 getter 名称,而 JSONObject 有严格的 getter 检查?
-
FWIW,Jackson 有自己的 JSONObject 类,不应该使用
org.json导入
标签: java json jackson-databind