【问题标题】:getJSON vs. optJSONgetJSON 与 optJSON
【发布时间】:2012-07-04 04:39:43
【问题描述】:

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

  1. getJSONObject()optJSONObject() 之间还有其他区别吗?
  2. get 相对于opt 有哪些优势,反之亦然?
  3. 在某些特定情况下,我想使用其中一种,或者强烈反对/禁止使用其中一种?

【问题讨论】:

  • 根据问题 2 和 3,最佳答案可能是您希望如何根据代码上下文处理错误。

标签: json getjson


【解决方案1】:

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

【讨论】:

  • 我认为如果你使用getJSONObject,因为它会抛出异常,如果你使用try catch,你可以在catch中更轻松地处理错误的JSON格式
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-17
        • 2012-05-03
        • 2016-11-05
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多