我有一个复杂的 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
提交
取消