我有一個復雜的 json 和一個鍵列表,它們代表到我想要訪問、刪除或插入的特定節點的任意長“路徑”。那可能嗎?例如對于 json{ "token": { "d1": 3000, "d2": [ { "d3": "a1", "d4": "a2" } ], "d5": [ "d6", "d7" ], "d8": { "d9": true, "d10": 10000 }}和清單['token','d2','d3']對于插入命令,結果為removeFromJson(jsonString,key_path)將會{ "token": { "d1": 3000, "d2": [ { "d4": "a2" } ], "d5": [ "d6", "d7" ], "d8": { "d9": true, "d10": 10000 }}
1 回答

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
JsonNode正如托馬斯在評論中提到的那樣,我會依靠它get和remove方法。就像是:
public void remove(String json, List<String> path) {
JsonNode root = new ObjectMapper.readTree(json);
int lastIndex = path.size() - 1;
for (int i = 0; i < lastIndex; i++) {
root = root.get(path.get(i));
}
root = root.remove(path.get(lastIndex));
return root;
}
您可以使用子列表或流進一步優化迭代,并且您可能希望處理路徑實際上并未通向給定 json 中的任何內容的情況。
注意:如果您需要在任意對象內的任意路徑上執行此行為,則此選項有效 -JsonNode非常適合您不知道會得到什么的情況。如果你確實知道你會得到什么(從同一個對象中刪除的總是相同的東西),那么使用映射器集將 JSON 反序列化為對象可能是更好的形式,以忽略對象中缺少但存在于中的字段JSON。
添加回答
舉報
0/150
提交
取消