Reputation: 32331
I have the below JSON , i need to remove all the keys which have null value
I have tried this
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);
}
}
but the actual json is unaffected , could you please tell me how to do this .
Upvotes: 4
Views: 26920
Reputation: 1
thx!
Here is an improved regex expression that also works for an formatted and unformatted JSON string:
str.replaceAll(" *\"\\w+\"*:(\\s)?null(,)?(\\r)?(\\n)?", "");
Upvotes: 0
Reputation: 35
I used it like this and it worked for me.
@JsonInclude(value = Include.NON_NULL)
Upvotes: -2
Reputation: 3502
If it's only about manipulating a string which structure you know well a solution would be to use some regex
str.replaceAll(".*\": null(,)?\\r\\n", "");
It could be easier to find a good regex than to invest time in building a model that could be used by Jackson.
Three notes:
the code above doesn't figure out which is the last line and adapt the json accordingly.
the pattern should be compiled separately.
org.json is very inefficient compared to Jackson.
Upvotes: 3
Reputation: 1
Use Jackson API and use @JsonInclude(Include.NON_NULL) on your model/DTO class to remove.
Like
@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
public class Video {
//the properties
}
Upvotes: 0
Reputation: 8141
Check your null value like this
if(keyvalue == null)
This fixex the issue
Upvotes: 1
Reputation: 2110
Firstly, create an model class which is corresponding to the JSON string.
Add
@JsonIgnoreProperties(ignoreUnknown = true)
to your model class such as
@JsonIgnoreProperties(ignoreUnknown = true)
public class Video {
//the properties
}
http://www.baeldung.com/jackson-deserialize-json-unknown-properties
Upvotes: 0