java - 从 json 映射到对象时得到错误的结果
问题描述
我正在使用 Spring 和其他框架编写一个 java 应用程序。我正在尝试使用 GSON 将数据从字符串获取到自定义对象。在我的代码中,我使用GSON
将字符串映射到自定义对象。我就是这样做的:
gson.fromJson(response.getBody(), Hello.class)
在我的Hello.java
,我有:
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Hello {
@JsonProperty("test1")
List<Test1> test1;
@JsonProperty("test2")
List<Test2> test2;
}
@JsonIgnoreProperties(ignoreUnknown = true)
class Test1 {
@JsonProperty("a")
private String a;
@JsonProperty("b")
private String b;
}
@JsonIgnoreProperties(ignoreUnknown = true)
class Test2 {
@JsonProperty("x")
private Test3 test3;
@JsonProperty("y")
private String y;
}
@JsonIgnoreProperties(ignoreUnknown = true)
class Test3 {
@JsonProperty("l")
private String l;
@JsonProperty("m")
private String m;
}
我的 JSON 看起来有点像这样:
{
"test1": [
{
"a": "a",
"b": "b"
}
],
"test2": [
{
"x": {
"l": "l",
"m": "m"
},
"y": "y"
}
]
}
但是只有 test1 被 Gson 正确加载了所有值,而 test2 完全为空。我在这里做错了什么?
解决方案
代替
gson.fromJson(response.getBody(), Hello.class);
利用
String json = new String(response.body().bytes());
gson.fromJson(json , Hello.class)
而且,检查你的json
字符串可能有无效字符可能来自不好的 Web 服务设计,例如:2 双引号开始和结束 json 字符串。
\"{\"message\":\"hello\"}\"
<= 这是错误的
正确的是
{\"message\":\"hello\"}
或者{"message":"hello"}
并且还使用@SerializedName
代替@JsonProperty
最后检查区分大小写的json键,我的意思M
是不等于m
推荐阅读
- robotframework - 使用反应组件上的机器人框架访问列表中项目的索引
- python - 使用 BeautifulSoup 遍历 HTML 以查找标签和字符串匹配
- android - 在 android 上具有多个图像的启动画面
- c++ - 选择排序程序未正确排序
- c# - 在超大文件中搜索(Open Academic Graph / Microsoft Academic Graph)
- javascript - 将保存在 HTML 中的图片显示到 Vue.js 页面中
- datatables - JQuery 数据表:卡中不是全尺寸
- javascript - UnhandledPromiseRejectionWarning:TypeError:无法在客户端读取未定义的属性“通道”。
- reactjs - 将 Redux 与 useEffect Hook 混合使用
- php - Angular 9(使用 --proxy-config 运行)POST 返回 301,然后是 OPTIONS,然后 GET 没有 POST 正文发送到服务器