-1

我有这样的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
}

有没有办法在杰克逊或任何其他 java 包中做到这一点。?

4

2 回答 2

1

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

如果您能够将其转换为在“:”和“,”处拆分的字符串,请删除“创建一个 ArrayList 并使用索引 0,2,4... 作为键和 1,3,5.. 填充它。 . 作为价值并做上面提到的事情。

于 2020-09-03T11:46:14.953 回答
0

尝试这个。

    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}
于 2020-09-03T12:10:13.513 回答