在php中将额外的键值对添加到数组中会在Android端解析时发出JSONException提示
通常,我会向PHP服务器发送一个requet来查询mysql表的数据集,然后它会返回ANDROID来解析resonse字符串(JSONArray字符串),而不会出现问题。使用的PHP代码部分如下所示:在php中将额外的键值对添加到数组中会在Android端解析时发出JSONException提示,php,android,Php,Android,通常,我会向PHP服务器发送一个requet来查询mysql表的数据集,然后它会返回ANDROID来解析resonse字符串(JSONArray字符串),而不会出现问题。使用的PHP代码部分如下所示: .... if($result = mysql_query($sql, $link)) { if (mysql_num_rows($result) != 0) { while($row2 = mysql_fetch_array($result,MYSQL_ASS
....
if($result = mysql_query($sql, $link))
{
if (mysql_num_rows($result) != 0)
{
while($row2 = mysql_fetch_array($result,MYSQL_ASSOC))
{
$data[]=$row;
}
}
}
print_r(urlencode(json_encode($data)));
if (is_resource($result))
mysql_free_result($result);
mysql_close($link);
但是,如果在使用下面php代码中的方法完成sql查询后,在$data数组中再添加一个键值字符串PAR:
$data['new_key'] = "new_value";
在分析新的JSONArray字符串时,android端将出现JSONArry异常提示:。。。。。(值部分为双字节汉字)
如果你不介意,请帮我指出我错在哪里以及如何解决,谢谢 试试这个:
$data[]['new_key'] = "new_value";
此外,我认为您需要删除打印并用echo替换它:
echo urlencode(json_encode($data));
(顺便说一句,您也可以删除urlencode。)这可能与您将$data视为顺序数组,然后是关联数组有关。你能在android端发布解析它的代码吗?你在哪一行放$data['new_key']=“new_value”;谢谢jjm!最后一个$data数组在发布到Android之前在PHP端编码为JSONArray。然后Android解析JSONArray字符串并提示错误;在while循环完成后添加。谢谢woozy!首先,我按照你的建议修改代码。Android解析JSONArray没有错误。但是,另一个JSONException提示为:org.json.JSONException:No value for new_key。从LogCat上的响应字符串的日志来看,JSONArray字符串如下:{“old_key 1”:“old_value 1”,“old_key 2”:“old_value2”,“old_key 3”:“old_value3”,…},{“new_key”:“new_value”}。看字符串的末尾,新的键/值对位于分隔的括号中,这使得它无法被JSONObject方法检测和解析。再次感谢您的进一步评论!哼。。。我以为你想创建一个像这样的JSNON数组。如果你不想,你应该使用:$data[0]['new\u key']=“new\u value”。再次感谢woozy!按照您的建议,我使用了“$data[0]['new_key']=“new_value”;”代替。也没有例外提示。。。它的虫子!
echo urlencode(json_encode($data));