如何从JSON对象中删除null键

时间:2017-02-09 12:08:48

标签: java

我有以下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没有受到影响,请你告诉我该怎么做。

5 个答案:

答案 0 :(得分:1)

像这样检查你的空值

if(keyvalue == null)

此修复问题

答案 1 :(得分:1)

如果它只是关于操纵字符串你知道的结构,那么解决方案就是使用一些正则表达式

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

找到一个好的正则表达式比花费时间建立一个可供Jackson使用的模型更容易。

三个注释:

  • 上面的代码没有弄清楚哪一行是最后一行并相应地调整了json。

  • 模式应该单独编译。

  • 与杰克逊相比,
  • org.json的效率非常低。

答案 2 :(得分:0)

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

添加

@JsonIgnoreProperties(ignoreUnknown = true)

到您的模型类,例如

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

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

答案 3 :(得分:0)

使用Jackson API并在模型/ DTO类上使用@JsonInclude(Include.NON_NULL)进行删除。

喜欢

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

答案 4 :(得分:-1)

我是这样用的,它对我有用。

@JsonInclude(value = Include.NON_NULL)