getJSON与optJSON

时间:2012-07-03 17:32:15

标签: json getjson

当我注意到两种方法时,我正在查看JSONObject getJSONObject(String key) optJSONObject(String key)getJSONObject()。从文档中,我认为他们做了几乎相同的事情但有一点不同:如果找不到密钥或值,则JSONException会抛出optJSONObject(),而null只会返回{{1} }}

  1. getJSONObject()optJSONObject()之间是否存在其他差异?
  2. get优于opt,反之亦然?
  3. 是否有特定的情况我想要使用一个而不是强烈劝阻/禁止使用一个?

4 个答案:

答案 0 :(得分:12)

JSON中的值可能是可选的,因此使用optJSONObject会更好,因为您只需要检查它是否为null并继续执行您的函数。

答案 1 :(得分:7)

如果您指定的密钥不存在,

optString将返回空字符串(“”)。 getString会抛出JSONException

答案 2 :(得分:0)

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

{
"sentences":[
  {
     "trans":"làm",
     "orig":"do",
     "translit":"",
     "src_translit":""
  }
]
}

答案 3 :(得分:0)

  1. 是的。 getJSONObject() 在找不到该对象时抛出异常。 optJSONObject() 返回 null。
  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
}