Php JSON输出开头不需要的{}
我在php代码的json输出的开头得到了{}。如何消除这种情况?我正在android中访问php的JSON输出。当android代码执行时,它显示从php代码中获取数据的错误Php JSON输出开头不需要的{},php,json,Php,Json,我在php代码的json输出的开头得到了{}。如何消除这种情况?我正在android中访问php的JSON输出。当android代码执行时,它显示从php代码中获取数据的错误 <?php include_once "/db_connect.php"; $db = new DB_CONNECT(); $head='0'; if(empty($head)){ for($head=1;$
<?php
include_once "/db_connect.php";
$db = new DB_CONNECT();
$head='0';
if(empty($head)){
for($head=1;$head<20;$head++){
if(!empty($head)){
$response["abc"] = array();
$flatp=mysql_query("SELECT co.id,co.user_id,co.cat_id,co.flatP,hds.HeadName,co.offer_name,u.shop_name,co.cost FROM abc co INNER JOIN categories ct ON ct.id=co.cat_id INNER JOIN
xyz u ON u.id=co.user_id INNER JOIN heads hds ON hds.id=ct.Head_id
WHERE ct.Head_id='$head' AND ct.id=co.cat_id AND co.user_id=u.id ORDER BY co.flatP DESC LIMIT 1");
if (mysql_num_rows($flatp) >0) {
while ($row = mysql_fetch_array($flatp)) {
$recp = array();
$recp["HeadName"]= $row["HeadName"];
$recp["offer_name1"]=$row["offer_name"];
$recp["shop_name1"]=$row['shop_name'];
$recp["cost1"]=$row['cost'];
$head_id=$row['user_id'];
//$recp["$head_id"]='user_id';
$imageurl='../local_offers_app/trunk/offer_images/'.$head_id.'/'.$row['id'].'.jpg';
$img=stripslashes($imageurl);
array_push($response["abc"], $recp);
}
}
$buyget=mysql_query("SELECT co.id,co.user_id,co.cat_id,co.offer_name,co.cost,u.shop_name, CASE WHEN buy>'get' THEN buy
else 'get' END as buy FROM abc co INNER JOIN categories ct ON ct.id=co.cat_id INNER JOIN xyz u ON u.id=co.user_id
WHERE ct.Head_id='$head' AND ct.id=co.cat_id ORDER BY co.buy DESC LIMIT 1");
if(mysql_num_rows($buyget) >0) {
while ($row = mysql_fetch_array($buyget)) {
$recp = array();
$recp["offer_name2"]=$row["offer_name"];
$recp["shop_name2"]=$row['shop_name'];
$recp["cost2"]=$row['cost'];
array_push($response["abc"], $recp);
}
}
$buygetamt=mysql_query("SELECT a.id,a.user_id,a.cat_id,a.offer_name,a.cost,u.shop_name,a.buyqnt,
SUM(IF(a.cost<b.cost,1,0)) A,
SUM(IF(a.buyqnt>b.buyqnt,1,0)) B
FROM abc a JOIN abc b ON a.cost<b.cost AND a.buyqnt>b.buyqnt
LEFT OUTER JOIN abc c ON a.cost=c.cost AND
a.id>c.id AND b.id<c.id INNER JOIN categories ct ON ct.id=a.cat_id INNER JOIN xyz u ON u.id=a.user_id WHERE
ct.Head_id='$head' AND c.id IS NULL GROUP BY a.cost ORDER BY buyqnt DESC LIMIT 1");
if(mysql_num_rows($buygetamt) >0) {
while ($row = mysql_fetch_array($buygetamt)) {
$recp = array();
$recp["offer_name3"]=$row["offer_name"];
$recp["shop_name3"]=$row['shop_name'];
$recp["cost3"]=$row['cost'];
array_push($response["abc"], $recp);
}
}
$buygetp=mysql_query("SELECT a.id,a.user_id,a.cat_id,a.buyqnt,a.buyqntP,a.offer_name,a.cost,u.shop_name,
SUM(IF(a.buyqnt<b.buyqnt,1,0)) A,
SUM(IF(a.buyqntP>b.buyqntP,1,0)) B
FROM abc a JOIN abc b ON a.buyqnt<b.buyqnt AND a.buyqntP>b.buyqntP LEFT OUTER
JOIN abc c ON a.buyqnt=c.buyqnt AND a.id>c.id AND b.id<c.id INNER JOIN categories
ct ON ct.id=a.cat_id INNER JOIN xyz u ON u.id=a.user_id WHERE ct.Head_id='$head' AND c.id IS NULL GROUP BY
a.buyqntP ORDER BY buyqntP DESC LIMIT 1");
if(mysql_num_rows($buygetp) >0) {
while ($row = mysql_fetch_array($buygetp)) {
$recp = array();
$recp["offer_name4"]=$row["offer_name"];
$recp["shop_name4"]=$row['shop_name'];
$recp["cost4"]=$row['cost'];
array_push($response["abc"], $recp);
}
}
$upto=mysql_query("SELECT a.id,a.user_id,a.cat_id,a.offer_name,a.cost,u.shop_name,a.upto,
SUM(IF(a.cost<b.cost,1,0)) A,
SUM(IF(a.upto>b.upto,1,0)) B
FROM abc a JOIN abc b ON a.upto>b.upto LEFT OUTER JOIN abc c
ON a.cost=c.cost AND a.id>c.id AND b.id<c.id INNER JOIN categories ct ON ct.id=a.cat_id
INNER JOIN xyz u ON u.id=a.user_id WHERE ct.Head_id='$head' AND c.id IS NULL GROUP BY a.upto ORDER BY upto DESC LIMIT 1");
if(mysql_num_rows($upto) >0) {
while ($row = mysql_fetch_array($upto)) {
$recp = array();
$recp["offer_name5"]=$row["offer_name"];
$recp["shop_name5"]=$row['shop_name'];
$recp["cost5"]=$row['cost'];
array_push($response["abc"], $recp);
}
}
}
$object = (object) array_filter((array) $response);
$result = json_encode($object);
echo $result;
}
}
?>
这是我的php代码
<?php
include_once "/db_connect.php";
$db = new DB_CONNECT();
$head='0';
if(empty($head)){
for($head=1;$head<20;$head++){
if(!empty($head)){
$response["abc"] = array();
$flatp=mysql_query("SELECT co.id,co.user_id,co.cat_id,co.flatP,hds.HeadName,co.offer_name,u.shop_name,co.cost FROM abc co INNER JOIN categories ct ON ct.id=co.cat_id INNER JOIN
xyz u ON u.id=co.user_id INNER JOIN heads hds ON hds.id=ct.Head_id
WHERE ct.Head_id='$head' AND ct.id=co.cat_id AND co.user_id=u.id ORDER BY co.flatP DESC LIMIT 1");
if (mysql_num_rows($flatp) >0) {
while ($row = mysql_fetch_array($flatp)) {
$recp = array();
$recp["HeadName"]= $row["HeadName"];
$recp["offer_name1"]=$row["offer_name"];
$recp["shop_name1"]=$row['shop_name'];
$recp["cost1"]=$row['cost'];
$head_id=$row['user_id'];
//$recp["$head_id"]='user_id';
$imageurl='../local_offers_app/trunk/offer_images/'.$head_id.'/'.$row['id'].'.jpg';
$img=stripslashes($imageurl);
array_push($response["abc"], $recp);
}
}
$buyget=mysql_query("SELECT co.id,co.user_id,co.cat_id,co.offer_name,co.cost,u.shop_name, CASE WHEN buy>'get' THEN buy
else 'get' END as buy FROM abc co INNER JOIN categories ct ON ct.id=co.cat_id INNER JOIN xyz u ON u.id=co.user_id
WHERE ct.Head_id='$head' AND ct.id=co.cat_id ORDER BY co.buy DESC LIMIT 1");
if(mysql_num_rows($buyget) >0) {
while ($row = mysql_fetch_array($buyget)) {
$recp = array();
$recp["offer_name2"]=$row["offer_name"];
$recp["shop_name2"]=$row['shop_name'];
$recp["cost2"]=$row['cost'];
array_push($response["abc"], $recp);
}
}
$buygetamt=mysql_query("SELECT a.id,a.user_id,a.cat_id,a.offer_name,a.cost,u.shop_name,a.buyqnt,
SUM(IF(a.cost<b.cost,1,0)) A,
SUM(IF(a.buyqnt>b.buyqnt,1,0)) B
FROM abc a JOIN abc b ON a.cost<b.cost AND a.buyqnt>b.buyqnt
LEFT OUTER JOIN abc c ON a.cost=c.cost AND
a.id>c.id AND b.id<c.id INNER JOIN categories ct ON ct.id=a.cat_id INNER JOIN xyz u ON u.id=a.user_id WHERE
ct.Head_id='$head' AND c.id IS NULL GROUP BY a.cost ORDER BY buyqnt DESC LIMIT 1");
if(mysql_num_rows($buygetamt) >0) {
while ($row = mysql_fetch_array($buygetamt)) {
$recp = array();
$recp["offer_name3"]=$row["offer_name"];
$recp["shop_name3"]=$row['shop_name'];
$recp["cost3"]=$row['cost'];
array_push($response["abc"], $recp);
}
}
$buygetp=mysql_query("SELECT a.id,a.user_id,a.cat_id,a.buyqnt,a.buyqntP,a.offer_name,a.cost,u.shop_name,
SUM(IF(a.buyqnt<b.buyqnt,1,0)) A,
SUM(IF(a.buyqntP>b.buyqntP,1,0)) B
FROM abc a JOIN abc b ON a.buyqnt<b.buyqnt AND a.buyqntP>b.buyqntP LEFT OUTER
JOIN abc c ON a.buyqnt=c.buyqnt AND a.id>c.id AND b.id<c.id INNER JOIN categories
ct ON ct.id=a.cat_id INNER JOIN xyz u ON u.id=a.user_id WHERE ct.Head_id='$head' AND c.id IS NULL GROUP BY
a.buyqntP ORDER BY buyqntP DESC LIMIT 1");
if(mysql_num_rows($buygetp) >0) {
while ($row = mysql_fetch_array($buygetp)) {
$recp = array();
$recp["offer_name4"]=$row["offer_name"];
$recp["shop_name4"]=$row['shop_name'];
$recp["cost4"]=$row['cost'];
array_push($response["abc"], $recp);
}
}
$upto=mysql_query("SELECT a.id,a.user_id,a.cat_id,a.offer_name,a.cost,u.shop_name,a.upto,
SUM(IF(a.cost<b.cost,1,0)) A,
SUM(IF(a.upto>b.upto,1,0)) B
FROM abc a JOIN abc b ON a.upto>b.upto LEFT OUTER JOIN abc c
ON a.cost=c.cost AND a.id>c.id AND b.id<c.id INNER JOIN categories ct ON ct.id=a.cat_id
INNER JOIN xyz u ON u.id=a.user_id WHERE ct.Head_id='$head' AND c.id IS NULL GROUP BY a.upto ORDER BY upto DESC LIMIT 1");
if(mysql_num_rows($upto) >0) {
while ($row = mysql_fetch_array($upto)) {
$recp = array();
$recp["offer_name5"]=$row["offer_name"];
$recp["shop_name5"]=$row['shop_name'];
$recp["cost5"]=$row['cost'];
array_push($response["abc"], $recp);
}
}
}
$object = (object) array_filter((array) $response);
$result = json_encode($object);
echo $result;
}
}
?>
假设您这样做:
$object = (object) array_filter((array) $response);
$result = json_encode($object);
如果数组是关联的,则不需要在json编码之前强制转换为对象,因为json_encode将始终将关联数组放入对象中
array_filter从等于false的数组中删除所有条目(空数组不是false)
因此,您应该向筛选器添加自定义回调:
function notemptyarray($var) {
return is_array($var) && count($var) > 0;
}
$arr = array_filter((array) $response, "notemptyarray");
$result = json_encode($arr);
解决了
已删除“对象”并仅使用“数组\过滤器” 我就是这么做的
而不是
$object=(object)数组\过滤器((数组)$response);
$result=json_encode($object)
我把它改成
$object=array\u filter((array)$response)
通过修改php代码,它起到了作用。在序列化数据之前使用array\u filter()。似乎您对多个字典进行了json\u编码。在生成代码中解决这个问题。一旦添加了缩进以使其看起来更清晰,JSON看起来就无效了。我有5个不同的查询和不同的结果集,我正在从所有这5个结果集生成单个响应代码。有可能吗?谢谢你@steven。。我是按照你解释的方式做的。再次感谢。