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 的时候,永远都不要太相信数据源,要做好容错,否者数据的源头出问题,后续的处理都将会是有问题的。

你可能感兴趣的:(JSONObject 字段解析小记)