猿问

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

我有一个复杂的 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

  }

}


largeQ
浏览 231回答 1
1回答

婷婷同学_

JsonNode正如托马斯在评论中提到的那样,我会依靠它get和remove方法。就像是:public void remove(String json, List<String> path) {&nbsp; &nbsp; JsonNode root = new ObjectMapper.readTree(json);&nbsp; &nbsp; int lastIndex = path.size() - 1;&nbsp; &nbsp; for (int i = 0; i < lastIndex; i++) {&nbsp; &nbsp; &nbsp; &nbsp; root = root.get(path.get(i));&nbsp; &nbsp; }&nbsp; &nbsp; root = root.remove(path.get(lastIndex));&nbsp; &nbsp; return root;}您可以使用子列表或流进一步优化迭代,并且您可能希望处理路径实际上并未通向给定 json 中的任何内容的情况。注意:如果您需要在任意对象内的任意路径上执行此行为,则此选项有效 -JsonNode非常适合您不知道会得到什么的情况。如果你确实知道你会得到什么(从同一个对象中删除的总是相同的东西),那么使用映射器集将 JSON 反序列化为对象可能是更好的形式,以忽略对象中缺少但存在于中的字段JSON。
随时随地看视频慕课网APP

相关分类

Java
我要回答