org.json.JSONObject 类型的值无法转换为 JSONArray

Posted

技术标签:

【中文标题】org.json.JSONObject 类型的值无法转换为 JSONArray【英文标题】:Value of type org.json.JSONObject cannot be converted to JSONArray 【发布时间】:2013-08-24 20:45:27 【问题描述】:

当我从另一个活动返回字符串并尝试将其转换为 JSONArray 时,程序会显示:

08-22 14:51:35.313: E/YourCartActivity(1134): Error parsing data 
org.json.JSONException:
Value "yourCart_totalPrice":"5500.00","yourCart_productName":"AAA",
"yourCart_productImg":"http:\/\/10.0.2.2\/appserv\/products\/aaa02.jpg",
"yourCart_productID":"0000002",
"yourCart_productAmount":"2",
"yourCart_shopID":"001" 
of type org.json.JSONObject cannot be converted to JSONArray

有人知道如何解决这个问题吗?

这是我的代码:

String json = yourCartConnect.getYourCartDetails();

        try 
            JSONArray jResult = new JSONArray(json);


            for(int i=0;i<json.length();i++)
                JSONObject f = jResult.getJSONObject(i);
                YourCartEntry resultRow = new YourCartEntry();

                resultRow.setYourCart_shopID(f.getString("yourCart_shopID"));
                resultRow.setYourCart_totalPrice(f.getString("yourCart_totalPrice"));
                resultRow.setYourCart_productName(f.getString("yourCart_productName"));     
                resultRow.setYourCart_productID(f.getString("yourCart_productID"));
                resultRow.setYourCart_productImg(f.getString("yourCart_productImg"));
                resultRow.setYourCart_productAmount(f.getString("yourCart_productAmount"));

                yourCartEntries.add(resultRow);
            

        setList(yourCartEntries);


         catch (JSONException e) 
            Log.e("YourCartActivity", "Error parsing data " + e.toString());
            errorConnectToServer();
        

【问题讨论】:

你的 json 是一个 json 对象,而不是一个 json 数组 ... 您是否使用 php 构建 JSON 响应字符串? 请贴出完整代码! 您正在解析 JsonArray 中的 Jsonobject。 [] 内的数据是 JsonArray, 内的键值对是 JSONObject 【参考方案1】:

试试这个代码:

String json = yourCartConnect.getYourCartDetails();



         try 
                JSONObject jsonObject = new JSONObject(json)
                JSONArray jResult = jsonObject.getJSONArray("Your array key");

                for(int i=0;i<jResult.length();i++)
                    JSONObject f = jResult.getJSONObject(i);
                   // write your remaining code here
                

            setList(yourCartEntries);


             catch (JSONException e) 
                Log.e("YourCartActivity", "Error parsing data " + e.toString());
                errorConnectToServer();
            

【讨论】:

【参考方案2】:

试试这个代码..

try 
    JSONArray jArray = new JSONArray("your JSON result........");
    JSONObject json_data = null;
    StringBuilder print = new StringBuilder();
    for (int i = 0; i < jArray.length(); i++) 
        json_data = jArray.getJSONObject(i);
        System.out.println("json_data : " + json_data);
        System.out.println("\n");
        print.append(json_data.getString("yourCart_shopID") + ", " + 
            json_data.getString("yourCart_totalPrice") + ", " + 
            json_data.getString("yourCart_productName") + ", " + 
            json_data.getString("yourCart_productID") + ", " + 
            json_data.getString("yourCart_productImg") + ", " + 
            json_data.getString("yourCart_productAmount") + "\n");
        yourCartEntries.add(print.toString());
    
    setList(yourCartEntries);
 catch (JSONException e1) 
    e1.printStackTrace();

【讨论】:

【参考方案3】:

你有 JSONObject 字符串,而不是 JSONArray,

JSONArray here

EG:

["yourCart_totalPrice":"5500.00","yourCart_productName":"AAA","yourCart_productImg":"http:\/\/10.0.2.2\/appserv\/products\/aaa02.jpg","yourCart_productID":"0000002","yourCart_productAmount":"2","yourCart_shopID":"001"]

【讨论】:

【参考方案4】:

试试这个..

String json = yourCartConnect.getYourCartDetails();

        try 
            if(!TextUtils.isEmpty(json))
              JSONObject f=new JSONObject(json);
              YourCartEntry resultRow = new YourCartEntry();    
              resultRow.setYourCart_shopID(f.getString("yourCart_shopID"));
              resultRow.setYourCart_totalPrice(f.getString("yourCart_totalPrice"));
              resultRow.setYourCart_productName(f.getString("yourCart_productName"));     
              resultRow.setYourCart_productID(f.getString("yourCart_productID"));
              resultRow.setYourCart_productImg(f.getString("yourCart_productImg"));
              resultRow.setYourCart_productAmount(f.getString("yourCart_productAmount"));
              setList(resultRow);
            
         catch (JSONException e) 
            Log.e("YourCartActivity", "Error parsing data " + e.toString());
            errorConnectToServer();
        

【讨论】:

以上是关于org.json.JSONObject 类型的值无法转换为 JSONArray的主要内容,如果未能解决你的问题,请参考以下文章

org.json.JSONObject & org.json.JSONArray

值类型 org.json.JSONObject 无法转换为 JSONArray

未找到 Java 类型、类 org.json.JSONObject.... 和 MIME 媒体类型、application/json 的消息正文阅读器

如何使用 ResponseEntity 返回 JSONObject 而不是 HashMap? (未找到类型返回值的转换器:类 org.json.JSONObject)

java.lang.NoClassDefFoundError:org/json/JSONObject [重复]

net.sf.json.JSONObject 和org.json.JSONObject 的差别