Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JAVA中未知的Json格式中按键删除Json元素_Java_Json_Spring Boot_Jackson - Fatal编程技术网

从JAVA中未知的Json格式中按键删除Json元素

从JAVA中未知的Json格式中按键删除Json元素,java,json,spring-boot,jackson,Java,Json,Spring Boot,Jackson,我需要按键名删除完整的JSON对象,我每次都有随机JSON,我需要找到一个特定元素并删除它。 例如,我有以下JSON: { "abc":{ "remove_me": "123456" } } 但是下次我可能会有以下几点 { "abc": { "xyz": { "test": "test

我需要按键名删除完整的JSON对象,我每次都有随机JSON,我需要找到一个特定元素并删除它。 例如,我有以下JSON:

{
    "abc":{
        "remove_me": "123456"
    }
}

但是下次我可能会有以下几点

{
    "abc": {
        "xyz": {
            "test": "test"
        }
    },
     "abc1": {
        "xyz1": {
            "remove_me": "232233",
            "test": "dfefd",

        }
    }
}
每次我都有不同的JSON格式,甚至是更复杂的格式。但是我必须删除元素的关键是
remove\u me


我是用Java做的,请帮忙

你可以这样做。这将迭代并删除每个匹配的键

private static void iterateJSONAndRemoveKey(JSONObject jObj) {
    Set<String> keys = jObj.keySet();
    for(String key : keys) {
        if(key.equals("remove_me")) {
            jObj.remove(key);
        }
        else if(jObj.get(key) instanceof JSONObject) {
            JSONObject subObject = (JSONObject) jObj.get(key);
            iterateJSONAndRemoveKey(subObject);
        }
        else if(jObj.get(key) instanceof JSONArray) {
            JSONArray jArray = (JSONArray) jObj.get(key); 
            for(int i = 0; i < jArray.size(); i++) {
                if(jArray.get(i) instanceof JSONObject) {
                iterateJSONAndRemoveKey((JSONObject)jArray.get(i));
                }
            }
        }
    }
}
private static void iterateJSONAndRemoveKey(JSONObject jObj){
Set keys=jObj.keySet();
用于(字符串键:键){
if(key.equals(“remove_me”)){
jObj.移除(键);
}
else if(jObj.get(key)JSONObject实例){
JSONObject subObject=(JSONObject)jObj.get(key);
iterateJSONAndRemoveKey(子对象);
}
else if(jObj.get(key)JSONArray实例){
JSONArray jArray=(JSONArray)jObj.get(key);
for(int i=0;i
您可以这样做。这将迭代并删除每个匹配的键

private static void iterateJSONAndRemoveKey(JSONObject jObj) {
    Set<String> keys = jObj.keySet();
    for(String key : keys) {
        if(key.equals("remove_me")) {
            jObj.remove(key);
        }
        else if(jObj.get(key) instanceof JSONObject) {
            JSONObject subObject = (JSONObject) jObj.get(key);
            iterateJSONAndRemoveKey(subObject);
        }
        else if(jObj.get(key) instanceof JSONArray) {
            JSONArray jArray = (JSONArray) jObj.get(key); 
            for(int i = 0; i < jArray.size(); i++) {
                if(jArray.get(i) instanceof JSONObject) {
                iterateJSONAndRemoveKey((JSONObject)jArray.get(i));
                }
            }
        }
    }
}
private static void iterateJSONAndRemoveKey(JSONObject jObj){
Set keys=jObj.keySet();
用于(字符串键:键){
if(key.equals(“remove_me”)){
jObj.移除(键);
}
else if(jObj.get(key)JSONObject实例){
JSONObject subObject=(JSONObject)jObj.get(key);
iterateJSONAndRemoveKey(子对象);
}
else if(jObj.get(key)JSONArray实例){
JSONArray jArray=(JSONArray)jObj.get(key);
for(int i=0;i
当我使用com.fasterxml.jackson库时,下面是解决方案

private static void iterateJSONAndRemoveKey(JsonNode rootNode,String toRemove) throws Exception {
        Iterator<String> keysIterator = rootNode.fieldNames();
        while (keysIterator.hasNext()) {
            String key = keysIterator.next();
            if (key.equalsIgnoreCase(toRemove)){
                ((ObjectNode) rootNode).remove(toRemove);
                return;
            }else if (rootNode.isObject()){
                   iterateJSONAndRemoveKey(rootNode.get(key),toRemove);
            }else if (rootNode.isArray()){
                ArrayNode arrayNode = (ArrayNode) rootNode;
                for (JsonNode node : arrayNode) {
                    iterateJSONAndRemoveKey(node,toRemove);
                }

            }
        }
    }
private static void iterateJSONAndRemoveKey(JsonNode rootNode,String toRemove)引发异常{
迭代器keysIterator=rootNode.fieldNames();
while(keysIterator.hasNext()){
String key=keysIterator.next();
if(键等信号情况(toRemove)){
((ObjectNode)rootNode.remove(toRemove);
返回;
}else if(rootNode.isObject()){
iterateJSONAndRemoveKey(rootNode.get(key),toRemove);
}else if(rootNode.isArray()){
ArrayNode ArrayNode=(ArrayNode)根节点;
for(JsonNode节点:arrayNode){
iterateJSONAndRemoveKey(节点,toRemove);
}
}
}
}

问答帮助我在Jackson库中编写逻辑。

当我使用com.fasterxml.Jackson库时,下面是解决方案

private static void iterateJSONAndRemoveKey(JsonNode rootNode,String toRemove) throws Exception {
        Iterator<String> keysIterator = rootNode.fieldNames();
        while (keysIterator.hasNext()) {
            String key = keysIterator.next();
            if (key.equalsIgnoreCase(toRemove)){
                ((ObjectNode) rootNode).remove(toRemove);
                return;
            }else if (rootNode.isObject()){
                   iterateJSONAndRemoveKey(rootNode.get(key),toRemove);
            }else if (rootNode.isArray()){
                ArrayNode arrayNode = (ArrayNode) rootNode;
                for (JsonNode node : arrayNode) {
                    iterateJSONAndRemoveKey(node,toRemove);
                }

            }
        }
    }
private static void iterateJSONAndRemoveKey(JsonNode rootNode,String toRemove)引发异常{
迭代器keysIterator=rootNode.fieldNames();
while(keysIterator.hasNext()){
String key=keysIterator.next();
if(键等信号情况(toRemove)){
((ObjectNode)rootNode.remove(toRemove);
返回;
}else if(rootNode.isObject()){
iterateJSONAndRemoveKey(rootNode.get(key),toRemove);
}else if(rootNode.isArray()){
ArrayNode ArrayNode=(ArrayNode)根节点;
for(JsonNode节点:arrayNode){
iterateJSONAndRemoveKey(节点,toRemove);
}
}
}
}

问答帮助我在Jackson库中编写逻辑。

您使用的是JSON解析库吗?您使用哪个JSON库?作为一个选项,您可以自己实现逻辑:将JSON转换为
Map
,然后遍历类似于深度优先搜索逻辑的映射(检查map的值是list、map还是任何其他对象,并递归调用方法),如果遍历过程中的键是
remove_me
,则需要将其删除。我正在使用com.fasterxml.jackson。您正在使用JSON解析库吗?您使用哪个JSON库?作为一个选项,您可以自己实现逻辑:将JSON转换为
Map
,然后遍历类似于深度优先搜索逻辑的映射(检查map的值是list、map还是任何其他对象,并递归调用方法),如果遍历期间的键是
remove\u me
,则需要将其删除。我正在使用com.fasterxml.jackson。您可能希望检查数组中的元素是否也是对象。否则,如果JSON包含,例如
[1,2,3]
,您将收到一个错误。您可能还希望处理包含其他数组的数组。我如何使用我正在使用com.fasterxml.jackson库来使用此库?很抱歉,我之前没有提到库。非常感谢,这对我起了作用,做了两个小更改。**1)在jObj之后添加return语句。remove(key),2)used length()而不是for循环中的jArray.size()非常感谢!下面是完整的代码。您可能需要检查数组中的元素是否也是对象。否则,如果JSON包含,例如,
[1,2,3]
,您将得到一个错误。您可能还希望处理包含其他数组的数组。如何使用I am using com.fasterxml.jackson库来使用它?很抱歉,我之前没有提到这个库。非常感谢,我做了两个小改动。**1)在jObj.remove(key)之后添加return语句,2)在for循环中使用length()而不是jArray.size()非常感谢!下面是完整的代码。