我有一个hashmap,它具有String和object的键值对.这是json以下的转换.
{
"test1": {
"test2": {
"test3": {
"key": "value"
},
"somefields12": "some value2"
},
"somefields": "some value"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我没有转换为地图.我只有那张地图.如果这可能有关键和值,我必须根据该值编写一些逻辑.我实现如下:
if (map.containsKey("test1") ) {
final HashMap<String, Object> test1 = (HashMap<String, Object>) map.get("test1");
if (test1.containsKey("test2")) {
final List<Object> test2 = (List<Object>) test1.get("test2");
if (!test2.isEmpty()) {
final HashMap<String, Object> test3 = (HashMap<String, Object>) test2.get(0);
if (test3.containsKey("key")) {
final String value = String.valueOf(test2.get("key"));
if (!StringUtils.isBlank(value)) {
//do some work based on value
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想避免从我的代码中嵌套if(多个ifs).最好的方法是什么?
在Apple上的Objective-C中,有一种称为"键值编码"的东西,它允许您使用类似于文件系统路径的字符串遍历对象图.有一个非正式的协议(即接口),允许对象根据他们要求的"密钥"返回值.例如,默认是返回由键命名的字段的值,而像NSDictionaries这样的关系集合可以实现更有趣的行为.
伪代码示例:
foo.bar = new baz();
foo.bar.mymap = new map();
foo.bar.mymap['bom'] = 2;
foo.valueForKeyPath("bar.mymap.bom") # 2
Java有这样的东西吗?这很容易实现,但我想我先看看.
编辑:我已经尝试了建议的打印,但它给了我语法错误.无法解决.get任何人都知道修复?
问题:我有这张Java地图Map<String, Object> TestMap = new HashMap<String, Object>().在其对象值内是另一个地图Map<String, Integer> NestedTestMap.
我已String song存储为第一个地图的字符串键,我将第二个地图存储为String song对象值.在第二个映射中,我String Championships将其存储为其字符串键,并Integer 113存储为其对象值.
问题:如何访问整数?我将以某种方式访问第一个地图的字符串以到达第二个地图,并获得第二个地图的字符串的整数.是的相当复杂哈哈.
额外奖励:我如何将此作为断言声明?这不适合我:assert (Map<String, Object>)(TestMap.get("song")).get(("Championships").equals(113))
当我没有嵌套地图时,这样的东西对我来说很好:
assert ParsedMap.get("song").equals("kanye")