从JAVA中未知的Json格式中按键删除Json元素
我需要按键名删除完整的JSON对象,我每次都有随机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
{
"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()非常感谢!下面是完整的代码。