【问题标题】:check value exist or not in JSON object to avoid JSON exception检查 JSON 对象中是否存在值以避免 JSON 异常
【发布时间】:2013-12-01 13:32:36
【问题描述】:

我从 web 服务调用中得到一个 JSONObject。

JSONObject result = ...........

当我像result.getString("fieldName");一样访问时

如果该 JSONObject 中存在 fieldName,那么它工作正常。如果不存在,我将收到异常 JSONObject["fieldName"] not found.

我可以为此使用try catch。但我有近 20 个这样的字段。我需要为此使用 20 个 try catch 块还是有任何替代方法。提前致谢...

【问题讨论】:

  • 你可以在你所有的东西周围放一次尝试。
  • 或者检查事情做 if(typeof(JSONObject["fieldName"]) == "undefined")) { //没有设置字段 }

标签: java json


【解决方案1】:

假设您使用的是org.json.JSONObject,您可以改用JSONObject#optString(String key, String defaultValue)。如果key 不存在,它将返回defaultValue

String value = obj.optString(fieldName, defaultValueIfNull);

【讨论】:

    【解决方案2】:

    有一个方法JSONObject#has(key) 就是为了这个目的。这样可以避免每个字段的异常处理。

    if(result.has("fieldName")) {
        // It exists, do your stuff
    } else {
        // It doesn't exist, do nothing 
    }
    

    另外,您可以使用JSONObject#isNull(str)方法来检查是否为null

    if(result.isNull("fieldName")) {
        // It doesn't exist, do nothing
    } else {
        // It exists, do your stuff
    }
    

    您还可以将逻辑移动到一个通用方法(为了代码可重用性),您可以在其中传递任何JSONObject 和字段名称,如果该字段存在或不存在,该方法将返回。

    【讨论】:

      【解决方案3】:

      检查您的 JsonObject 实现是否包含名为“has”的方法。可以检查对象中是否存在属性。

      许多 JsonObject 实现都包含此方法。

      【讨论】:

        【解决方案4】:

        我使用此代码来执行此操作,它返回 undefined 或指定的 defaultValue 而不是上升异常

        /* ex: getProperty(myObj,'aze.xyz',0) // return myObj.aze.xyz safely
         * accepts array for property names: 
         *     getProperty(myObj,['aze','xyz'],{value: null}) 
         */
        function getProperty(obj, props, defaultValue) {
            var res, isvoid = function(x){return typeof x === "undefined" || x === null;}
            if(!isvoid(obj)){
                if(isvoid(props)) props = [];
                if(typeof props  === "string") props = props.trim().split(".");
                if(props.constructor === Array){
                    res = props.length>1 ? getProperty(obj[props.shift()],props,defaultValue) : obj[props[0]];
                }
            }
            return typeof res === "undefined" ? defaultValue: res;
        }
        

        【讨论】:

          【解决方案5】:

          更好的解决方案是使用 optString 而不是 getString。

          String name = jsonObject.optString("fieldName");
          // it will return an empty string ("") if the key you specify doesn't exist
          

          【讨论】:

          • 在你的情况下,什么是 jsonObject 类型?请同时提及依赖版本。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-15
          • 1970-01-01
          • 2017-12-07
          • 2013-12-23
          • 1970-01-01
          • 2022-01-16
          相关资源
          最近更新 更多