java 如何从JSON对象中删除空键

5us2dqdw  于 2023-10-14  发布在  Java
关注(0)|答案(6)|浏览(143)

我有下面的JSON,我需要删除所有具有空值的键
我已经试过这个

import java.util.Iterator;
import org.json.JSONException;
import org.json.JSONObject;
public class Remove {
    public static void main(String[] args) throws JSONException {
    String str = "{\r\n" + 
            "       \"videos\": {\r\n" + 
            "   
            "       }}";
        JSONObject json_obj = new JSONObject(str);
        JSONObject allKeys_json=    json_obj.getJSONObject("videos");
        Iterator<String> keys = allKeys_json.keys();
        while( keys.hasNext() ) {
        String keyanme = (String)keys.next();
        String keyvalue = allKeys_json.getString(keyanme);
        if(keyvalue.contains("null"))
        {
            System.out.println(keyanme+"\t"+keyvalue);
            json_obj.remove(keyanme);
        }
        }
    System.out.println(allKeys_json);
    }
}

但是实际的JSON是不受影响的,你能告诉我怎么做吗?

6qftjkof

6qftjkof1#

如果只是操作一个字符串,你很熟悉它的结构,那么一个解决方案就是使用正则表达式

str.replaceAll(".*\": null(,)?\\r\\n", "");

找到一个好的正则表达式可能比花时间构建一个可供Jackson使用的模型更容易。
三个注意事项:

  • 上面的代码没有弄清楚哪一行是最后一行,并相应地调整JSON。
  • 该模式应单独编制。
  • org.json与Jackson相比效率非常低。
x759pob2

x759pob22#

像这样检查空值

if(keyvalue == null)

这个问题

iyr7buue

iyr7buue3#

首先,创建一个与JSON字符串对应的模型类。
添加

@JsonIgnoreProperties(ignoreUnknown = true)

到你的模型类,比如

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Video  {
    //the properties
}

http://www.baeldung.com/jackson-deserialize-json-unknown-properties

zfciruhq

zfciruhq4#

使用JacksonAPI并在模型/DTO类上使用@JsonInclude(Include.NON_NULL)来删除。

@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
public class Video  {
    //the properties
}
g6baxovj

g6baxovj5#

thx!
下面是一个改进的正则表达式,它也适用于格式化的未格式化的JSON字符串:

str.replaceAll(" *\"\\w+\"*:(\\s)?null(,)?(\\r)?(\\n)?", "");
2exbekwf

2exbekwf6#

我这样使用它,它为我工作。

@JsonInclude(value = Include.NON_NULL)

相关问题