嵌套Java HashMap的动态变量键

嵌套Java HashMap的动态变量键,java,Java,我是java新手 我需要使用其键路径从嵌套HashMap获取HashMap值,并且键是一个动态变量 例如,HashMap是 {data={ "owner" : { "id" : 34, "firstName" : "John", "lastName" : "Smith", "owner" : { "id" : 44, "f

我是java新手

我需要使用其键路径从
嵌套HashMap
获取HashMap值,并且键是一个动态变量

例如,HashMap是

{data={
        "owner" : {
            "id" : 34,
            "firstName" : "John",
            "lastName" : "Smith",
            "owner" : {
                "id" : 44,
                "firstName" : "Henrick",
                "lastName" : "kane"
            },
        },
        "fname" : "sahal",
        "lname" : "kn",
    }
}
我得到了像
data.owner.owner.id
data.owner.id
fname
这样的键。 因此,密钥路径的长度可以是任意数字。上面的示例是
4
3
1
。 它可以是5、6或7。 关键点是动态的,因此我无法预测达到最后一个关键点值的长度

有没有一种方法可以动态提取HashMap值,如下所示 myHashMaoVariable.get(“data.owner.owner.id”)

现在,我要将键
data.owner.id
拆分为一个列表 和检查
如果键[0]>1和myHashMaoVariable.containsKey(键[0]),
如果键[1]>1且myHashMaoVariable.get(键[0]).containsKey(键[1]),则,
如果键[2]>1和myHashMaoVariable.get(键[0]).get(键[1]).containsKey(键[1]),则
按此类推,直到键长5

有没有更好的方法来支持n个密钥路径长度?
此外,嵌套贴图没有
深度。它也是动态的。

假设您有一个顶级地图:

Map<String, Object> rootMap = ...//obtain map
采用以下主要方法进行测试:

public static void main(String[] args) {

    Map<String, Object> rootMap = new HashMap<>(), data = new HashMap<>(), owner1 = new HashMap<>(),
            owner2 = new HashMap<>();

    rootMap.put("data", data);
    data.put("owner", owner1);
    owner1.put("owner", owner2);
    owner2.put("firstName", "something");

    System.out.println(rootMap);
    System.out.println(readKeyValue("data.owner.owner.firstName", rootMap));
}

如何定义键的动态列表?如果映射到这些键的值中的数据与其手册相似(即,包含firstName、lastName等),我可以将其存储到db中。我从db中得到这个值,然后应用到映射中得到这个值。嵌套映射的深度是多少?它是常量还是动态的?很好的问题@ruwanaka如果有深度,我上面的代码可以工作。它是动态的,看起来非常像JSON数据,而不是散列映射。如果是,请使用JsonPath进行查找。搜索web以查找用于执行此操作的Java库。
Object value = readKeyValue("data.owner.owner.id", rootMap);
public static void main(String[] args) {

    Map<String, Object> rootMap = new HashMap<>(), data = new HashMap<>(), owner1 = new HashMap<>(),
            owner2 = new HashMap<>();

    rootMap.put("data", data);
    data.put("owner", owner1);
    owner1.put("owner", owner2);
    owner2.put("firstName", "something");

    System.out.println(rootMap);
    System.out.println(readKeyValue("data.owner.owner.firstName", rootMap));
}
{data={owner={owner={firstName=something}}}}
something