使用php编码json?

时间:2011-09-23 16:16:19

标签: php json

我希望json使用php编码函数,如下所示

<?php 
  require "../classes/database.php";

  $database = new database();
  header("content-type: application/json");
  $result = $database->get_by_name($_POST['q']);   //$_POST['searchValue']

  echo '{"results":[';
  if($result)
  {
     $i = 1;
     while($row = mysql_fetch_array($result))
     {
        if(count($row) > 1) 
        {
           echo json_encode(array('id'=>$i, 'name' => $row['name']));
           echo ",";
        }
        else 
        {
           echo json_encode(array('id'=>$i, 'name' => $row['name']));
        }
        $i++; 
     }
  }
  else
  {
     $value = "FALSE";
     echo json_encode(array('id'=>1, 'name' => ""));  // output the json code
  }

  echo "]}";

我希望输出json是那样的

{"results":[{"id":1,"name":"name1"},{"id":2,"name":"name2"}]}

但输出json如下所示

{"results":[{"id":1,"name":"name1"},{"id":2,"name":"name2"},]}

当你意识到最后有逗号时,我想删除它所以它可以是正确的json语法,如果我删除了echo ",";当有多个结果时json会生成这样的{"results":[{"id":1,"name":"name1"}{"id":2,"name":"name2"}]} {{1}} 1}}并且该语法也是错误的

希望每个人都明白我的意思,任何想法都会受到赞赏

6 个答案:

答案 0 :(得分:13)

如果我是你,我不会json_encode每个单独的数组,而是将数组合并在一起,然后在最后合并数组json_encode。下面是使用5.4's短数组语法的示例:

$out = [];
while(...) {
  $out[] = [ 'id' => $i, 'name' => $row['name'] ];
}
echo json_encode($out);

答案 1 :(得分:9)

将json_encoding作为最后一步。纯粹用PHP构建数据结构,然后在最后编码该结构。做中间编码意味着你基本上构建自己的json字符串,这总是很棘手,很可能“破坏”。

$data = array();
while ($row = mysql_fetch_array($result)) {
   $data[] = array('id'=>$i, 'name' => $row['name']);
}
echo json_encode($data);

答案 2 :(得分:1)

首先将它全部构建到一个数组中,然后一次编码整个事物:

$outputdata = array();
while($row = mysql_fetch_array($result)) {
    $outputdata[] = $row;
}

echo json_encode($outputdata);

答案 3 :(得分:1)

这是我带来的解决方案

 $i = 1; 
 $array = array(); 
 while($row = mysql_fetch_array($result)) 
 { 
 $array[] = json_encode(array('id'=>$i, 'name' => $row['name'])); 
 $i++; 
 } 
 echo implode(',', $array); // Take output array glue it with the  

这会将json放入一个数组,然后使用glue(,)输出以下{"results":[{"id":1,"name":"maadi"},{"id":2,"name":"monofiya"}]}进行内爆,而无需首先执行数组,然后将其传递给json_encode()函数

答案 4 :(得分:0)

B"H

制作自己的函数非常简单

function son($ar) {
    $str = "";
    $str .= "{";
    $id = 0;
    foreach($ar as $a=>$b) {
        $id++;
        $str .= "\"".$a."\":";
        if(!is_numeric($b)) {
            $str .= "\"".$b."\"";
        } else {
            $str .= $b;
        }
        
        if($id < count($ar)) {
            $str .= ",";
        }
    }
    $str .= "}";
    return $str;
}

例如 mysqli...

function noom($rz) {
    $ar = array();
    if($rz) {
        if(mysqli_num_rows($rz) > 0) {
            while($k = mysqli_fetch_assoc($rz)) {
                foreach($k as $ki=>$v) {
                    $ar[$ki] = $v;
                }
            }
        }
    }
    return $ar;
}

和使用

<?php
$o = new mysqli(
    "localhost",
    "root",""
);

if($o->connect_error) {
    echo "DUDE what are you/!";
} else {
    if(isset($_GET["t"])) {
        $t = $_GET["t"];
        $rz = mysqli_query($o,
            "SELECT * FROM game.".$t
        );
        $ar = noom($rz);
        echo son($ar);
    } else {
        echo "B\"H<br>Yo, what's krakin?";
    }
}

答案 5 :(得分:-1)

只需改变那些

echo json_encode(array('id'=>$i, 'name' => $row['name']));
echo ",";

到这些

echo ",";
echo json_encode(array('id'=>$i, 'name' => $row['name']));