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