如何删除此错误->;Json解析错误:java.lang.String类型响应的值success can';不能转换为JSONArray
运行我的应用程序时出现JSON解析错误 下面提到了我面临错误的代码和json url如何删除此错误->;Json解析错误:java.lang.String类型响应的值success can';不能转换为JSONArray,java,android,json,Java,Android,Json,运行我的应用程序时出现JSON解析错误 下面提到了我面临错误的代码和json url MyHttpHandler myhttp=newmyhttphandler(); 字符串Newurl=url+“auth/email/check/”+email+“/”; //从Myhttphandler类调用MyServiceCall方法 字符串jsonstng=myhttp.MyServiceCall(Newurl); Log.e(标签,“来自URL的响应:”+jsonstng); if(jsonstng!
MyHttpHandler myhttp=newmyhttphandler();
字符串Newurl=url+“auth/email/check/”+email+“/”;
//从Myhttphandler类调用MyServiceCall方法
字符串jsonstng=myhttp.MyServiceCall(Newurl);
Log.e(标签,“来自URL的响应:”+jsonstng);
if(jsonstng!=null){
试一试{
JSONObject JSONObject=新的JSONObject(jsonstng);
//获取JSON数组节点
JSONArray JSONArray=jsonObject.getJSONArray(“响应”);
//循环遍历json中的所有数据
for(int i=0;ivalue
mydata.put(“响应”,myid);
添加(mydata);
}
}捕获(最终JSONException e){
Log.e(标记“Json解析错误:”+e.getMessage());
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
Toast.makeText(StartMainActivity.this,“JSON解析错误”,Toast.LENGTH_SHORT.show();
}
});
}
}否则{
e(标记“无法从服务器获取json”);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
Toast.makeText(StartMainActivity.this,“无法从服务器获取json。请检查LogCat是否存在可能的错误!”,Toast.LENGTH_SHORT.show();
}
});
}
来自URL的响应:{“响应”:“成功”}
Json分析错误:在java.lang.String类型的响应中值success无法转换为JSONArray
'success'
不是json数组。
json数组的一个示例如下
"cars":[ "Ford", "BMW", "Fiat" ]
这就是为什么它不能被解析
上面的示例“cars”数组具有字符串值。所以字符串对象
在您的示例中,在jsonArray之后有一个用于jsonArray的for循环
for(int i=0;i
这里您说您期望JSONObject
因此,您正在等待的格式是
{"response":[ {"response":"success"},{"response":"success"},{"response":"success"} ]}
我相信这不是你最终想要的:p
还可以在循环中创建一个新的HashMap()。(请阅读HashMap,因为您的实现不支持相同的键用法,例如,不能使用具有相同键“response”的两个字符串对象的HashMap)
不要只检查空检查,还要检查字符串是否为空
首先,定义服务响应的正确格式,然后定义捕获数据和搜索web的正确实现,以便使用类似jackson的库将响应解析为对象
问候
Ps如果你想处理这个响应,
然后
也许足够了
{"response":"success"} is a JSONObject but you are treating it as JSONArray.
JSON数组总是用[]
示例:[“a”、“b”、“c”]
或类似于JSONObject数组的内容。例如:[{“key”:“value”},{“key”,“value”}]
。许多组合都是可能的,但最重要的是,它应该从[]
开始,不要试图将字符串解析为JSONArray。两者之间没有层次结构连接,没有is-A关系,因此您无法解析它。您尝试解析的json不遵循您定义的模式,您希望格式为{“”:[]},但json的格式为{“”:“}。您正在查找的内容可以完成,但您需要决定在值是字符串而不是数组的情况下要执行的操作,是否要null,一个空数组或一个包含值的数组?实际上,这是我的登录表单信息,当服务器上存储并通过jason的电子邮件和密码与输入电子邮件和密码匹配时,然后显示成功。这是我用android学习json的最佳方式。因为我不是专家,也不太了解这一点。有你有很多选择。开始阅读以学习JSON。然后检查JSON到java对象。
String jsonstng = "{\"response\":\"success\"}";//your service response
String responseValue = "fail";
if (jsonstng != null) {
try {
JSONObject jsonObject = new JSONObject(jsonstng);
if (jsonObject.length() > 0 && jsonObject.has("response")) {
responseValue = jsonObject.getString("response");
}
} catch (final JSONException e) {
//log and handle error
}
}
System.out.println(responseValue);
{"response":"success"} is a JSONObject but you are treating it as JSONArray.