Java 如何测试JSONObject是否为null或不';不存在
我有一组Java 如何测试JSONObject是否为null或不';不存在,java,android,json,Java,Android,Json,我有一组JSONObject值,我从服务器接收这些值并对其进行操作。大多数时候,我得到一个带有值的JSONObject(比如统计),有时,它返回一个带有代码和错误描述的Error对象 如何构造代码,使其在返回错误时不会中断。我以为我能做到,但没用 public void processResult(JSONObject result) { try { if(result.getJSONObject(ERROR) != null ){ JSONObj
JSONObject
值,我从服务器接收这些值并对其进行操作。大多数时候,我得到一个带有值的JSONObject
(比如统计),有时,它返回一个带有代码和错误描述的Error
对象
如何构造代码,使其在返回错误时不会中断。我以为我能做到,但没用
public void processResult(JSONObject result) {
try {
if(result.getJSONObject(ERROR) != null ){
JSONObject error = result.getJSONObject(ERROR);
String error_detail = error.getString(DESCRIPTION);
if(!error_detail.equals(null)) {
//show error login here
}
finish();
}
else {
JSONObject info = result.getJSONObject(STATISTICS);
String stats = info.getString("production Stats"));
}
}
}
在JSONObject中,有一个“Has”方法可以用来确定密钥 我不知道这是否有效,但它看起来是可信的
public void processResult(JSONObject result) {
if(result.has("ERROR"))
{
JSONObject error = result.getJSONObject("ERROR")
String error_detail = error.getString("DESCRIPTION");
if(error_detail != null)
{
//Show Error Login
finish();
}
}
else if(result.has("STATISTICS"))
{
JSONObject info = result.getJSONObject("STATISTICS");
String stats = info.getString("Production Stats");
//Do something
}
else
{
throw new Exception("Could not parse JSON Object!");
}
}
使用.has(String)
和.isNull(String)
保守的用法可能是
if (record.has("my_object_name") && !record.isNull("my_object_name")) {
// Do something with object.
}
这可能有点晚(这是肯定的),但张贴给未来的读者
您可以使用不会引发任何异常和
返回按名称映射的值(如果该值存在并且是JSONObject),否则返回null
所以你可以
JSONObject obj = null;
if( (obj = result.optJSONObject("ERROR"))!=null ){
// it's an error , now you can fetch the error object values from obj
}
或者,如果您只想测试空值而不获取值,那么
if( result.optJSONObject("ERROR")!=null ){
// error object found
}
有一个完整的系列,它要么返回null
,要么您也可以使用重载版本使它们返回任何预定义的值。
e、 g
返回按名称映射的值(如果存在),如果存在则强制该值
必要时,如果不存在此类映射,则返回
其中,强制
意味着,它将尝试将值转换为字符串类型
@TheMonkeyMan答案的修改版本,以消除冗余查找
public void processResult(JSONObject result) {
JSONObject obj = null;
if( (obj = result.optJSONObject("ERROR"))!=null ){
//^^^^ either assign null or jsonobject to obj
// if not null then found error object , execute if body
String error_detail = obj.optString("DESCRIPTION","Something went wrong");
//either show error message from server or default string as "Something went wrong"
finish(); // kill the current activity
}
else if( (obj = result.optJSONObject("STATISTICS"))!=null ){
String stats = obj.optString("Production Stats");
//Do something
}
else
{
throw new Exception("Could not parse JSON Object!");
}
}
有时,使用NULL对象比使用Java的NULL值更方便,也不那么模棱两可
- JSONObject.NULL.equals(NULL)返回true toString()返回“NULL”
source--JSONObject oracle docs目前出现了什么问题?有趣的是,我单独使用了isNull()方法,但也遇到了同样的问题。发布包含键错误的JSON消息,并提供异常类型,我们将立即对此进行排序。:)您是否对@sparrow进行了排序?@RobertN:“has”检查JSONObject是否包含特定键。“isNull”检查与键关联的值是否为null或是否没有值@OceanLife如果使用isNull(字符串s),则可以跳过has(字符串s)。isNull(字符串s)检查与has(字符串s)相同的值,并另外检查值是否为“null”