【发布时间】:2020-11-17 03:55:58
【问题描述】:
我有一个我需要映射的 json 响应,不幸的是它没有键值对来启动。键都是单独的 guid,值是数据列表。下面是一个如何格式化的例子。我正在尝试找出一种创建对象列表的方法,例如:
HashMap
字符串名称:“guid1”
字符串值:“json 响应的其余部分”
或类似的,只要我可以在 guid 上搜索以获取我需要的值。
下面是代码示例:
{
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx1": {
"values": {
"item1":"value1"
"item2":"value2"
"item3":"value3"
}
},
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx2": {
"values": {
"item1":"value1"
"item2":"value2"
"item3":"value3"
}
},
......more entries
}
我希望在调用 guid 的情况下获得类似以下内容,但没有运气:
{
"guid":"xxxxxxxe-xxxx-xxxx-xxxx-xxxxxx1",
"values": {
"item1":"value1"
"item2":"value2"
"item3":"value3"
}
}
对如何映射此类数据有任何建议吗?我需要依次获取值信息并进一步映射。
编辑 - 更喜欢使用 jackson,因为我已经在我的代码的其他部分这样做了。
编辑 2 - 我做了以下操作,但我得到了一种非常丑陋的处理方式,但我仍然希望有人可以提供更简单的解决方案:
Map<String, Map<String, Map<String, String>>> attributes = new HashMap<String,Map<String, Map<String, String>>>();
attributes =new Gson().fromJson(jsonString, Map.class);
//and then...
Map valueString = attributes.get("xxxx-xxx-xxx);
Map nestMap= (Map) valueString.get("values");
String theInfoINeed = (String)nestMap.get("item1");
【问题讨论】:
-
你可以迭代
map.entrySet()。或者创建一个自定义类型适配器。 (另外,我开发了具有TokenStream转换概念的Lychee数据绑定库。示例:github.com/Miha-x64/LinkedLists/blob/master/mvvm-app/src/main/…)