30

当我注意到这两种方法时,我正在查看文档和. 从文档中,我认为他们做了几乎相同的事情,但有一个区别:如果找不到键或值,则抛出一个while简单地返回。JSONObjectgetJSONObject(String key)optJSONObject(String key)getJSONObject()JSONExceptionoptJSONObject()null

  1. getJSONObject()和之间还有其他区别optJSONObject()吗?
  2. getoveropt和reverse的优势是什么?
  3. 在某些特定情况下,我想使用其中一种,或者强烈不鼓励/禁止使用其中一种?
4

4 回答 4

14

JSON 中的值可能是可选的,因此使用 optJSONObject 更好,因为您只需检查它是否为空并继续您的功能。

于 2013-04-18T13:58:09.213 回答
9

optString如果您指定的键不存在,则返回空字符串 ("")。getString抛出一个JSONException.

于 2017-08-06T05:16:28.010 回答
2
  1. 是的。getJSONObject()找不到该对象时引发异常。optJSONObject()返回空值。
  2. 老实说,一个比另一个没有任何优势,这真的是个人喜好问题。
  3. 我能想到的唯一原因是潜在的可读性。例如,看看这段代码是如何完成同样的事情的

如果您在对象不存在时执行更多操作,则此选项更易于阅读。

JSONObject object = jsonResponse.optJSONObject("object");

if(object == null)
{
    // handle not existing here
}

如果您只是抛出另一个异常或做其他事情,那么这个选项会更容易一些。

JSONObject object = null;    

try
{
    object = jsonResponse.getJSONObject("object");
}
catch(JSONException je)
{
    // handle object not found here
}
于 2021-01-05T21:54:21.957 回答
0

我在我的 json 文件中使用 optJSONObject 键“句子”,它返回 null 但正确的结果可能是 JSONArray 或 String。

{
"sentences":[
  {
     "trans":"làm",
     "orig":"do",
     "translit":"",
     "src_translit":""
  }
]
}
于 2013-09-26T16:09:22.560 回答