Java 删除 "parent":"somevalue" from flattened json if "parent":"somevalue" 并且同样存在一个 "parent.new": "somevalue" json

Java remove "parent":"somevalue" from flattened json if “parent”:“somevalue” and there also exists a “parent.new”: “somevalue” in same json

我有 json 这样的 :

{
"lastModifiedBy" :"value",
"lastModifiedBy.$oid": "1234567189",
"displayedBy" : 0,
"displayedBy.one" : "Abhi",
"displayedBy.one.new" : "Sammy",
"displayedBy.two":"random_value3",
"a.b":null,
"b.c":null,
"d.e.f":null
}

我只想保留最长的密钥而不是以前的状态父级而不影响其他密钥 我需要的输出:

{
"lastModifiedBy.$oid": "1234567189",
"displayedBy.one.new" : "Sammy",
"displayedBy.two":"random_value3",
"a.b":null,
"b.c":null,
"d.e.f":null
}

有没有办法在 Jackson 或任何其他 java 软件包中做到这一点?

如果您能够将其转换为 ArrayList,请删除所有不需要的键。例如 foreach.

如果您能够将其转换为拆分为“:”和“”的字符串,则删除“s 创建一个 ArrayList 并使用索引 0,2,4... 作为键和 1 来填充它, 3,5...作为值并执行上述操作。

试试这个。

    Map<String, String> map = new HashMap<>();
    map.put("lastModifiedBy", "value");
    map.put("lastModifiedBy.$oid", "1234567189");
    map.put("displayedBy", "0");
    map.put("displayedBy.one", "Abhi");
    map.put("displayedBy.one.new", "Sammy");
    map.put("displayedBy.two", "random_value3");
    map.put("a.b", null);
    map.put("b.c", null);
    map.put("d.e.f", null);
    List<String> removes = new ArrayList<>();
    for (String parent : map.keySet())
        for (String child : map.keySet())
            if (parent != child && child.startsWith(parent)) {
                removes.add(parent);
                break;
            }
    for (String key : removes)
        map.remove(key);
    System.out.println(map);

输出:

{a.b=null, d.e.f=null, displayedBy.one.new=Sammy, b.c=null, displayedBy.two=random_value3, lastModifiedBy.$oid=1234567189}