【问题标题】:JSON Object cannot be converted to JSON Array [duplicate]JSON对象无法转换为JSON数组[重复]
【发布时间】:2017-10-05 14:05:59
【问题描述】:

当我尝试从服务器转换以下 JSON 响应字符串时出现此错误。我想根据服务器的响应来处理 JSONObject 或 JSONArray,因为大多数时候它返回 JSONArray。

来自服务器的 JSON 响应

jsonString = {"message":"No Results found!","status":"false"}

Java代码如下

try
{
    JSONArray jsonArrayResponse = new JSONArray(jsonString);
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT)
    {
        if(jsonArrayResponse != null && jsonArrayResponse.length() > 0)
        {
            getCancelPurchase(jsonArrayResponse.toString());
        }
    }
}
catch(JSONException e)
{
    e.printStackTrace();
}

错误日志:

org.json.JSONException: Value {"message":"No Results found!","status":"false"} of type org.json.JSONObject cannot be converted to JSONArray
at org.json.JSON.typeMismatch(JSON.java:111)
at org.json.JSONArray.<init>(JSONArray.java:96)
at org.json.JSONArray.<init>(JSONArray.java:108)

谁能帮帮我。

谢谢

【问题讨论】:

  • JsonArray字符串表示以“[”开头和jsonObject以“{”开头当然还有更多区别,请google一下

标签: java android json jsonexception


【解决方案1】:

根据您对回答 1 的评论,您可以做的是

String data = "{ ... }";
Object json = new JSONTokener(data).nextValue();
if (json instanceof JSONObject)
  //you have an object
else if (json instanceof JSONArray)
  //you have an array

【讨论】:

  • 谢谢你明白我的意思。
【解决方案2】:

您的回复{"message":"No Results found!","status":"false"} 不是数组。它是一个对象。在您的代码中使用JSONObject 而不是JSONArray

提示:数组用方括号[]括起来,对象用花括号括起来{}。

【讨论】:

  • 我也期待 JSONArray 的产品。如何同时处理 JSONArray 和 JSONObject?
  • 正如@nafas 评论的那样。 JsonArray 字符串表示以“[”开头,jsonObject 以“{”开头。我希望你能弄清楚。
【解决方案3】:

我通过编写以下代码来解决这个问题[礼貌@Optional]

String jsonString = "{\"message\":\"No Results found!\",\"status\":\"false\"}";
/* String jsonString = "[{\"prodictId\":\"P00001\",\"productName\":\"iPhone 6\"},"
        + "{\"prodictId\":\"P00002\",\"productName\":\"iPhone 6 Plus\"},"
        + "{\"prodictId\":\"P00003\",\"productName\":\"iPhone 7\"}]";
 */
JSONArray jsonArrayResponse;
JSONObject jsonObject;
try {
    Object json = new JSONTokener(jsonString).nextValue();
    if (json instanceof JSONObject) {
        jsonObject = new JSONObject(jsonString);
        if (jsonObject != null) {
            System.out.println(jsonObject.toString());
        }
    } else if (json instanceof JSONArray) {
        jsonArrayResponse = new JSONArray(jsonString);
        if (jsonArrayResponse != null && jsonArrayResponse.length() > 0) {
            System.out.println(jsonArrayResponse.toString());
        }
    }
} catch (JSONException e) {
    e.printStackTrace();
}

【讨论】:

    猜你喜欢
    • 2020-02-06
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多