为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Jackson 在 JSON 中插入和删除内部节点?

使用 Jackson 在 JSON 中插入和删除内部节点?

largeQ 2023-07-13 14:36:46
我有一个复杂的 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。


查看完整回答
反对 回复 2023-07-13
  • 1 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信