Json数组给出异常

时间:2016-07-25 08:49:54

标签: android arrays json soap

以下是我的Json回复 -

CallWMDefaultWithRef1Response{CallWMDefaultWithRef1Result=[{"ROLE_NAME":"","USER_MOBILE":"","IMEI_NUMBER1":,"USER_ID":30,"ROLE_ID":4,"USER_NAME":""}]; }

以下是我的代码 -

if (resultlog!= null) {

  try {
    JSONArray resultarray = new JSONArray(resultlog);
    for (int i = 0; i < resultarray.length(); i++) {
      JSONObject c = resultarray.getJSONObject(i);
      roleName = c.getString("ROLE_NAME");
      userMobile = c.getString("USER_MOBILE");
      imeiNumber = c.getString("IMEI_NUMBER1");
      userId = c.getString("USER_ID");
      roleid = c.getString("ROLE_ID");
      userNmae = c.getString("USER_NAME");
    }
  } catch (JSONException e) {
    e.printStackTrace();
  }
}

以下是我的错误

  

org.json.JSONException:值CallWMDefaultWithRef1Response类型   java.lang.String无法转换为JSONArray

5 个答案:

答案 0 :(得分:0)

在resultLog下面是你的实际json结果。

    String resultlog= "{CallWMDefaultWithRef1Response:{CallWMDefaultWithRef1Result:{"ROLE_NAME":"","USER_MOBILE":"","IMEI_NUMBER1":"","USER_ID":30,"ROLE_ID":4,"USER_NAME":""}}}
    JSONObject resultJsonObject = null;
    try {
        JSONObject obj1 = new JSONObject(resultlog);
        JSONObject obj2 = obj1.has("CallWMDefaultWithRef1Response") ? obj1.getJSONObject("CallWMDefaultWithRef1Response") : null;
        resultJsonObject = obj2.has("CallWMDefaultWithRef1Result") ? obj2.getJSONObject("CallWMDefaultWithRef1Result") : null;
        roleName = resultJsonObject.has("ROLE_NAME") ? resultJsonObject.getString("ROLE_NAME") : "";           
        userMobile = resultJsonObject.has("USER_MOBILE") ? resultJsonObject.getString("USER_MOBILE") : "";
        imeiNumber = resultJsonObject.has("IMEI_NUMBER1") ? resultJsonObject.getString("IMEI_NUMBER1") : "";
        userId = resultJsonObject.has("USER_ID") ? resultJsonObject.getInt("USER_ID") : "";            
        roleid = resultJsonObject.has("ROLE_ID") ? resultJsonObject.getInt("ROLE_ID") : "";            
        userNmae = resultJsonObject.has("USER_NAME") ? resultJsonObject.getString("USER_NAME") : "";           

   } catch (JSONException e) {
       e.printStackTrace();
   }

(或)

如果您的流程以CallWMDefaultWithRef1Response作为jsonObject开始,那么您应该在try块中添加以下代码行。

     String resultlog = "{\"ROLE_NAME\":\"\",\"USER_MOBILE\":\"\",\"IMEI_NUMBER1\":\"\",\"USER_ID\":30,\"ROLE_ID\":4,\"USER_NAME\":\"\"}";
    try {
        JSONObject resultJsonObject = new JSONObject(resultlog);          
            roleName = resultJsonObject.has("ROLE_NAME") ? resultJsonObject.getString("ROLE_NAME") : "";           
            userMobile = resultJsonObject.has("USER_MOBILE") ? resultJsonObject.getString("USER_MOBILE") : "";
            imeiNumber = resultJsonObject.has("IMEI_NUMBER1") ? resultJsonObject.getString("IMEI_NUMBER1") : "";
            userId = resultJsonObject.has("USER_ID") ? resultJsonObject.getInt("USER_ID") : "";            
            roleid = resultJsonObject.has("ROLE_ID") ? resultJsonObject.getInt("ROLE_ID") : "";            
            userNmae = resultJsonObject.has("USER_NAME") ? resultJsonObject.getString("USER_NAME") : "";           

    } catch (JSONException e) {
        e.printStackTrace();
    }

否则请在下面使用:

{{1}}

答案 1 :(得分:0)

您的错误是将整个字符串用作JSONArray

从日志中删除 CallWMDefaultWithRef1Response 。然后从剩下的内容中创建一个新的JSONObject,然后获取JSONArray  来自对象和循环的 CallWMDefaultWithRef1Result array获取对象。

答案 2 :(得分:0)

试试我的代码

try{
   JSONObject result=resultlog.getJSONObject("CallWMDefaultWithRef1Response");
   JSONArray resultarray=result.getJSONArray("CallWMDefaultWithRef1Result");
      for(int i=0;i<resultarray.length();i++){
         JSONObject c=resultarray.getJSONObject(i);
         roleName=c.getString("ROLE_NAME");
         userMobile=c.getString("USER_MOBILE");
         imeiNumber=c.getString("IMEI_NUMBER1");
         userId=c.getString("USER_ID");
         roleid=c.getString("ROLE_ID");
         userNmae=c.getString("USER_NAME");
      }
 } catch(JSONException e) {
      e.printStackTrace();
 }

答案 3 :(得分:0)

您的结果日志字符串似乎是

  

<强> CallWMDefaultWithRef1Response {CallWMDefaultWithRef1Result = [{&#34; ROLE_NAME&#34;:&#34;&#34;&#34; USER_MOBILE&#34;:&#34;&#34 ;,&#34; IMEI_NUMBER1&#34;:&#34; USER_ID&#34;:30,&#34; ROLE_ID&#34:4,&#34; USER_NAME&#34;:&#34;&#34 ;}]; }

它包含一个字符串( CallWMDefaultWithRef1Response )以及JSON内容。您应该只将JSON内容传递给新的JSONArray()构造函数。

要从结果日志中提取JSON数组,请尝试

resultlog = resultlog.substring(jsonStr.indexOf("["), jsonStr.lastIndexOf("]")+1);

所以结果日志将是

  

[{&#34; ROLE_NAME&#34;:&#34;&#34;&#34; USER_MOBILE&#34;:&#34;&#34;&#34; IMEI_NUMBER1&#34 ;: &#34; USER_ID&#34;:30,&#34; ROLE_ID&#34:4,&#34; USER_NAME&#34;:&#34;&#34;}]

     

注意:此处&#34; IMEI_NUMBER1&#34; 后缺少一个文字值   将抛出JSONException。您应该在服务器中将其更正为   在IMEI_NUMBER1之后包含空字符串。

答案 4 :(得分:0)

我用非常简单的步骤解决了这个问题 -

try {
      JSONArray resultarray = new JSONArray(resultlog.getProperty(0));
      for (int i = 0; i < resultarray.length(); i++) {
                JSONObject c = resultarray.getJSONObject(i);
                roleName = c.getString("ROLE_NAME");
                userMobile = c.getString("USER_MOBILE");
                imeiNumber = c.getString("IMEI_NUMBER1");
                userId = c.getString("USER_ID");
                roleid = c.getString("ROLE_ID");
                userNmae = c.getString("USER_NAME");
        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

请向我的答案寻求帮助。

快乐编码..