为jsonObj.getString返回null(" key");

时间:2017-01-21 11:12:33

标签: java json

 JSONObject jsonObj  = {"a":"1","b":null}
  1. 案例1:jsonObj.getString("a") returns "1";

  2. 案例2:jsonObj.getString("b") return nothing ;

  3. 案例3:jsonObj.getString("c") throws error;

  4. 如何让案例2和3返回null而不是"null"

2 个答案:

答案 0 :(得分:10)

您可以使用get()代替getString()。这样返回Object,JSONObject将猜测正确的类型。甚至适用于null。 请注意,Java nullorg.json.JSONObject$Null之间存在差异。

CASE 3不会返回“nothing”,它会抛出异常。因此,您必须检查存在的密钥(has(key))并返回null。

public static Object tryToGet(JSONObject jsonObj, String key) {
    if (jsonObj.has(key))
        return jsonObj.opt(key);
    return null;
}

修改

根据您的评论,您只需要Stringnull,这会导致optString(key, default)获取。请参阅修改后的代码:

package test;

import org.json.JSONObject;

public class Test {

    public static void main(String[] args) {
        // Does not work
        // JSONObject jsonObj  = {"a":"1","b":null};

        JSONObject jsonObj  = new JSONObject("{\"a\":\"1\",\"b\":null,\"d\":1}");

        printValueAndType(getOrNull(jsonObj, "a")); 
        // >>> 1 -> class java.lang.String

        printValueAndType(getOrNull(jsonObj, "b")); 
        // >>> null -> class org.json.JSONObject$Null

        printValueAndType(getOrNull(jsonObj, "d")); 
        // >>> 1 -> class java.lang.Integer

        printValueAndType(getOrNull(jsonObj, "c")); 
        // >>> null -> null
        // throws org.json.JSONException: JSONObject["c"] not found. without a check
    }

    public static Object getOrNull(JSONObject jsonObj, String key) {
        return jsonObj.optString(key, null);
    }

    public static void printValueAndType(Object obj){
        System.out.println(obj + " -> " + ((obj != null) ? obj.getClass() : null)); 
    }
}

答案 1 :(得分:1)

您可以使用optString("c")optString("c", null)

the documentation

中所述