次のような 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 パッケージでこれを行う方法はありますか?
ここで質問する方法や内容については、ヘルプセンターをご覧ください。 「これが欲しい」という要件を単に削除するだけです。評価されていません。ご自身で何かを試してみて、特定の問題に行き詰まった場合は、私たちが喜んでお手伝いいたします。ただし、ここは意図した場所ではないことを理解してくださいあなたのビジョンから実用的なプログラムに至るまでに必要となる、おそらく多くのステップを含むガイダンスを提供します。
– ゴーストキャット
2020 年 9 月 3 日 11:47
------------------------
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}
共有
この回答を改善します
フォローする
編集
2020 年 9 月 4 日 0:18
2020 年 9 月 3 日 12:10 に回答
ユーザー4910279
ユーザー4910279