我在JSON以下理解
{:“ 1”,“ value”:“某些值”}
{:“ 2”,“ value”:null}
{’“ id”:“ 3”}
要保存上述JSON数据,我有java类:
class myClass
{
private String id;
private String value;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
在上面的示例中:id 2和id 3的值均为NULL
在Java中,很难区分JSON中传递的null值和其他未传递的字段,因此java pojo的默认值为NULL。
对我而言,id 2和id 3的值不应相同。
是否可以在Java中区分提供的JSON NULL和默认NULL?
答案 0 :(得分:2)
最好不要完全区分null
和 missing 值,原因是您不得不问这个问题:并非所有JSON库都可以实现这种区分,尤其是在自动转换为POJO。
它是否有效取决于JOSN库,但是您可以尝试向POJO添加一个附加标志,该标志是在调用setter时设置的。例如这样的
class MyClass {
private String value;
private boolean isSetValue;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
isSetValue = true;
}
public boolean getIsSetValue() {
return isSetValue;
}
}
如果您打算序列化此POJO,则需要从序列中排除getIsSetValue
,并且可能需要修改JSON序列化程序以使用getIsSetValue
来决定是否写入null
值或根本没有价值。
答案 1 :(得分:0)
我能想象的唯一可能的解决方案:跟踪对setter的调用,并确保您使用的jSON库设置了显式的null值。
将给出以下结果:
Torbens评论后的替代方案: 如果该库不使用getters / setters,则可以对“ unset”使用特殊值,并在getter中对其进行屏蔽以返回null。
答案 2 :(得分:0)
使用此代码:
JSONObject jsonObject = new JSONObject(response);
Sting s = jsonObject.optString("value");
为此 {“ id”:“ 2”,“ value”:null} 它将返回null为JAVA Sting
jsonObject.optString("value"); // s="null"
为此 {“ id”:“ 3”} 它将返回空值
jsonObject.optString("value"); // s==null