以下是我的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
答案 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();
}
请向我的答案寻求帮助。
快乐编码..