根据对象将对象转换为 JSONObject 或 JSONArray 的方法

Dam*_*tes 5 java android json casting jsonobject

我一直在尝试这样的方法,但找不到任何解决方案:

public static JSONObject or JSONArray objectToJSON(Object object){
    if(object is a JSONObject)
        return new JSONObject(object)
    if(object is a JSONArray)
        return new JSONArray(object)
}
Run Code Online (Sandbox Code Playgroud)

我试过这个:

public static JSONObject objectToJSONObject(Object object){
    Object json = null;
    try {
        json = new JSONTokener(object.toString()).nextValue();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    JSONObject jsonObject = (JSONObject)json;
    return jsonObject;
}

public static JSONArray objectToJSONArray(Object object){
    Object json = null;
    try {
        json = new JSONTokener(object.toString()).nextValue();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    JSONArray jsonObject = (JSONArray)json;
    return jsonObject;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我调用 objectToJSONArray(object) 时,我放了一个 JSONObject,它在投射时崩溃了。所以我想要一个通用的方法。有人找到任何解决方案吗?

Dan*_*ent 8

我假设你已经看到了这个问题。您可以instanceof在从每个方法返回之前添加对 using 类型的检查,如果 Object 不是预期的类型,则返回 null。那应该摆脱 ClassCastException。

例子:

public static JSONObject objectToJSONObject(Object object){
    Object json = null;
    JSONObject jsonObject = null;
    try {
        json = new JSONTokener(object.toString()).nextValue();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    if (json instanceof JSONObject) {
        jsonObject = (JSONObject) json;
    }
    return jsonObject;
}

public static JSONArray objectToJSONArray(Object object){
    Object json = null;
    JSONArray jsonArray = null;
    try {
        json = new JSONTokener(object.toString()).nextValue();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    if (json instanceof JSONArray) {
        jsonArray = (JSONArray) json;
    }
    return jsonArray;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以尝试这两种方法,并使用不返回 null 的方法的返回值,如下所示:

public void processJSON(Object obj){
    JSONObject jsonObj = null;
    JSONArray jsonArr = null;
    jsonObj = objectToJSONObject(obj);
    jsonArr = objectToJSONArray(obj);
    if (jsonObj != null) {
        //process JSONObject
    } else if (jsonArr != null) {
        //process JSONArray
    }
}
Run Code Online (Sandbox Code Playgroud)