JSONObject 字段解析小记

通常在对 json 格式的字符串进行解析时,会遇到取具体字段值的处理,以获取 String 字段为例,在方法调用上有以下两种,

  • getString
    要求较高,如果没有取到对应字段,就会抛 JSONException,不建议用
  • optString
    当没有取到字段时,会返回"",也可以指定返回某个值。当有对应值时,取到的就是对应值。

同理,在解析任何类型是,应该都会有 opt 的获取方式,以 optString 和 optJSONArray 为例,在具体使用上需要考虑以下几种异常情况。

  1. 不存在字段
    在用 optString 时会获取到默认值 ""。

  2. 存在字段,但格式不正确

//例如这种,在运行解析时会抛异常
//建议做好异常捕获和日志跟踪
{
    "name":
}
  1. 存在字段,但赋值为 null
{
    //像这样为 null 的情况处理时就返回默认值 "",当然默认值可以指定
    "name":null,
    //像这样就会直接读取为 "null" 值字符串
    "name2":"null",
    //像这样就会返回数组为 null
    "array":null
}
  1. 存在字段,但赋值为空
{
    //像这样就会直接读取为 "" 值字符串
    "name":"",
    //像这样就会返回一个空数组
    "array":[]
}
  1. 存在字段,但赋值不正确
{
    //如果以 optString 获取,最终会成为 "123" 字符串
    "name":123,
    //如果以 optJSONArray 获取,最终会返回 null
    "array":""
}
  1. 存在字段,但数组中个别元素为 null,"null"
//像这样,解析这个数组,因为会以对象的形式去解析每个元素
//index == 1 时返回的就是 null
//index == 3,4 时返回的也都是 null
{
    "array":[{
        "itemName":"1"
    },null,{
        "itemName":"2",
        "itemVal":"value"
    },"null","name"]
}

我们在手动解析 json 的时候,永远都不要太相信数据源,要做好容错,否者数据的源头出问题,后续的处理都将会是有问题的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容