org.json.JSONException:JSONArray [0]不是JSONObject

org.json.JSONException:JSONArray [0]不是JSONObject

问题描述:

String jsreturn: [{"type":1, "msg":"ERROR"}]的输出。org.json.JSONException:JSONArray [0]不是JSONObject

我试图获取msg键的错误内容。我通过将字符串返回转换为数组来实现这一点。但是,在下面的代码中,我在每行旁边注释了一些错误。 任何见解?

Vector<ClsReturn> ret = null; 
ret = ds.id(collection, "fs",in_uri); 

String jsReturn = ret.toString(); 

JSONObject myJsonObject = new JSONObject(ret); 

JSONArray array = new JSONArray(jsReturn); 

int i = 0; 

while(i < array.length()){ 
    myJsonObject = array.getJSONObject(i); //org.json.JSONException: JSONArray[0] is not a JSONObject. 
    System.out.println(myJsonObject.getString("msg")); 
    i++; 
} 
+0

你举的例子并没有真正意义的,因为你是在试图访问'msg'这你的JSON没有(至少是你向我们展示的那个)。你的数组也代表'solrReturn',而不是'jsReturn',它保存着你的JSON。 – Pshemo

+0

这不是你应该如何编写JSon数组,SOLr返回类型不打算与json对象一起使用,以便返回json对象数组,或者定义包含这两个参数的对象列表,或者存在通配符列表。 –

+0

我无法用您当前的代码重现此问题,这表明'jsReturn'可能不包含您描述的JSON结构。 – Pshemo

我不知道如果我明白你的问题,我觉得很容易,这个工程:

String jsReturn =" [{\"type\":1, \"txt\":\"ERROR\"}]"; 
    JSONArray array = new JSONArray(jsReturn); 
    int i = 0; 
    JSONObject myJsonObject = new JSONObject(); 
    while(i < array.length()){ 
     myJsonObject = array.getJSONObject(i); 
     System.out.println(myJsonObject.getString("txt")); 
     i++; 
    } 
+0

是的,这是正确的 –

+0

在这一点上,你的答案表明OP代码应该工作。请阅读:[是“适合我”的答案有效?](http://meta.stackexchange.com/questions/118992/are-works-for-me-answers-valid) – Pshemo

+0

谢谢@Pshermo我必须考虑这个细节,但问题表明'我收到了一些错误评论',这个答案必须解决错误。如果该问题认为重要,以了解为什么会发生,我将解释代码。再次感谢 – MrElefant