当前位置: 首页 > 知识库问答 >
问题:

使用jackson删除JSON元素

幸乐湛
2023-03-14

我有一个特定的JSON节点,对应于import org.codehaus.jackson。JsonNode,而不是导入org.codehaus.jackson.map.JsonNode。

[
    {
        "givenName": "Jim",
        "formattedName": "jimJackson",
        "familyName": null,
        "middleName": "none",
        "honorificPrefix": "mr",
        "honorificSuffix": "none"
    },
    {
        "givenName": "john",
        "formattedName": "johnLasher",
        "familyName": null,
        "middleName": "none",
        "honorificPrefix": "mr",
        "honorificSuffix": "none"
    },
    {
        "givenName": "carlos",
        "formattedName": "carlosAddner",
        "familyName": null,
        "middleName": "none",
        "honorifiPrefix": "mr",
        "honorificSuffix": "none"
    },
    {
        "givenName": "lisa",
        "formattedName": "lisaRay",
        "familyName": null,
        "middleName": "none",
        "honorificPrefix": "mrs",
        "honorificSuffix": "none"
    },
    {
        "givenName": "bradshaw",
        "formattedName": "bradshawLion",
        "familyName": null,
        "middleName": "none",
        "honorificPrefix": "mr",
        "honorificSuffix": "none"
    },
    {
        "givenName": "phill",
        "formattedName": "phillKane",
        "familyName": null,
        "middleName": "none",
        "honorificPrefix": "mr",
        "honorificSuffix": "none"
    },
    {
        "givenName": "Gabriel",
        "formattedName": "gabrielMoosa",
        "familyName": null,
        "middleName": "none",
        "honorificPrefix": "mr",
        "honorificSuffix": "none"
    }
]

我想从上述数组的所有JSON节点中删除“familyName”和“middleName”。有没有办法做到这一点?

共有3个答案

越宣
2023-03-14

我最近想到了这个问题,因为我有一个不寻常的JSON片段,我需要删除其中的一个元素:

{
   "allan": { "score": 88 },
   "bill": { "score": 75 },
   "cassie": { "score": 96 },
   "warnings": [ { "name": "class_low_numbers", "message": "this class is has less than 10 students" }]
}

前三个元素表示一个人和一个相应的分数对象。最后一个“警告”,与分数对象不匹配,这就是我想删除的对象。

从上面gsteff的回答中,将rootNode作为起始JsonNode,我发现消除它的方法是迭代每个节点,将节点的对象映射版本添加到HashMap中,这是我想要的返回对象,除非它是“warnings”元素:

HashMap<String, ScoreDetails> results = new HashMap<String, ScoreDetails>();

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Iterator<Map.Entry<String, JsonNode>> fields = rootNode.fields();
while (fields.hasNext()) {
  Map.Entry<String, JsonNode> next = fields.next();
  if (!next.getKey().equals("warnings")) {
    results.put(
        next.getKey(), mapper.treeToValue(next.getValue(), ScoreDetails.class));
  }
}

return results;
松昱
2023-03-14

Jackson的ObjectMapper仅用几个步骤就给出了解决方案。

将json数据保存在一个文件中,比如“data.json”。将下面的代码复制到不带import语句的函数中,然后调用该函数。生成的JSON将写入一个新文件“data1.JSON”。

import java.io.File;
import java.io.IOException;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = objectMapper.readTree(new File("data.json"));
        for (JsonNode node : jsonNode) {
            ((ObjectNode)node).remove("familyName");
            ((ObjectNode)node).remove("middleName");
        }
        objectMapper.writeValue(new File("data1.json"), jsonNode);
金嘉言
2023-03-14

我还没有测试过这个,但是我认为类似这样的东西可以满足你的要求:

import org.codehaus.jackson.node.ObjectNode;
// ...
for (JsonNode personNode : rootNode) {
    if (personNode instanceof ObjectNode) {
        ObjectNode object = (ObjectNode) personNode;
        object.remove("familyName");
        object.remove("middleName");
    }
}

你也可以使用Jackon的原始解析API更有效地做到这一点,但代码会更混乱。

 类似资料:
  • 问题内容: 我想从JSON中删除JSON元素或整行。 我有以下JSON字符串: 问题答案: 您可以使用splice从数组中删除元素。

  • 问题内容: 我有一个特定的JSON节点,它对应于导入org.codehaus.jackson.JsonNode,而不是导入org.codehaus.jackson.map.JsonNode。 我想从上述数组的所有JSON节点中删除“ familyName”和“ middleName”。有什么办法可以做到这一点? 问题答案: 我还没有测试过,但是我认为这样可以满足您的需求: 您还可以使用Jackon

  • 你可以使用delete关键字来删除数组元素。如: delete myObj.sites[1];

  • 问题内容: 我的json数组的一部分 当我console.log我得到的元素 我还有一个要搜索的唯一ID 我想在我的视频数组中找到正确的ID,然后删除整个数组元素。因此,在那种情况下,我希望我的最终视频数组仅包含2个对象,而不是3个: 我的问题是如何进入阵列进行拼接。我更喜欢用jQuery 有什么帮助吗? 问题答案: 您可以使用grep: 在原始JavaScript中,您可能使用过类似的过滤器功能

  • 问题内容: 我试图遍历对象列表,从每个对象中删除一个元素。每个对象都是换行符。我试图然后按原样保存新文件,而对象中不包含任何元素。我知道这可能是一个简单的任务,但似乎无法完成这项工作。如果有人可以伸出援手,将不胜感激。谢谢。 } 我需要删除小时元素中包含的信息,但是信息并不总是相同的。有些包含全天,有些仅包含一两天的信息。我尝试使用的代码是Pyton,我整天都在搜索该代码以解决问题。我对Pytho

  • 问题内容: 我有一个看起来像这样的json数组: 我想有一个函数来删除“孩子”为空的元素。我该怎么做?我不是要答案,只是建议 问题答案: 要遍历对象的键,请使用循环: 要测试空元素的所有元素,可以使用递归方法:遍历所有元素,然后也递归地测试它们的孩子。 可以使用关键字删除对象的属性: 说明文件: https://developer.mozilla.org/zh-CN/docs/JavaScript