【发布时间】:2016-06-09 18:21:11
【问题描述】:
不是那么典型的情况。
我有来自服务器的下一个 JSON 字符串:{"SomeElements":[{"Id":"Title","Info":"{\"Text\": \"Sometext\"}"}]}
这是它的图形表示:
问题是字符串Info 包含另一个JSON 字符串。
这是我的 POJO:
public class Test {
private ArrayList<SomeElement> SomeElements;
public class SomeElement {
private String Id;
private String Info;
}
}
问题 - 有没有办法将Info 字符串解析为我的 POJO 中的 HashMap(例如)而不是字符串?
如果我尝试将其声明为HashMap<String, String>,则会出现错误"Expected OBJECT, but was STRING"。
处理此问题的最佳方法是什么?自定义反序列化器是唯一的方法吗?
!! 这个问题不是重复的!!
我无法更改来自服务器的 JSON 响应。
请仔细阅读 - 我在问,是否可以将 Info 字符串解析为另一个 JSON,而不是字符串。
解决方案我最终选择了下一个。
我声明了private LinkedTreeMap<String, String> infoMap; 并首先将Info 反序列化为字符串。那么:
public LinkedTreeMap<String, String> getInfoMap() {
if (infoMap == null) {
infoMap = new Gson().fromJson(info, new TypeToken<Map<String, String>>(){}.getType());
}
return infoMap;
}
我想这比编写自定义反序列化器要容易得多,但在更复杂的情况下,自定义反序列化器可能是唯一的选择。
所以在一般情况下@arjabbar 的答案会更好。
【问题讨论】:
-
你为什么要这么做?
-
简单——我想把服务器端的响应解析成一个可用的类。