getJSON与optJSON

getJSON与optJSON,json,getjson,Json,Getjson,我正在查看JSONObject时注意到了两种方法:getJSONObject(字符串键)和optJSONObject(字符串键)。从文档中,我发现他们做了几乎相同的事情,但有一点不同:如果找不到键或值,则getJSONObject()抛出一个JSONException,而optJSONObject()只返回null getJSONObject()和optJSONObject()之间还有其他区别吗 get比opt有什么好处,反之亦然 是否存在我希望使用其中一种而不是另一种的具体情况,或者强烈不鼓励

我正在查看
JSONObject
时注意到了两种方法:
getJSONObject(字符串键)
optJSONObject(字符串键)
。从文档中,我发现他们做了几乎相同的事情,但有一点不同:如果找不到键或值,则
getJSONObject()
抛出一个
JSONException
,而
optJSONObject()
只返回
null

  • getJSONObject()
    optJSONObject()
    之间还有其他区别吗
  • get
    opt
    有什么好处,反之亦然
  • 是否存在我希望使用其中一种而不是另一种的具体情况,或者强烈不鼓励/禁止使用其中一种

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

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

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

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

  • getJSONObject()
    在找不到该对象时引发异常
    optJSONObject()
    返回null
  • 老实说,两者之间并没有什么优势,这实际上是个人偏好的问题
  • 我能想到的唯一原因是潜在的可读性。例如,看看这段代码是如何完成同样的事情的
  • 如果在对象不存在的情况下执行更多操作,则此选项更易于阅读

    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
    }
    

    根据问题2和3,最好的答案可能是如何根据代码的上下文处理错误。我认为如果使用
    getJSONObject
    ,因为它会引发异常,如果使用
    try-catch
    ,您可以在
    catch
    中更轻松地处理错误的JSON格式