JSON结果可以保存

时间:2011-02-25 23:43:02

标签: php javascript json

我是JSON的新手,我只是想知道为什么每次我尝试将结果作为JSON传递时,浏览器(Firefox)总是让我将其保存为本地文件?这是JSON的行为吗?我认为这就像传递XML一样,浏览器只会显示它。我正在使用PHP构建JSON:

header('Content-Type: application/json');
$json = "{\n";
$json .= "  \"address\": \n";
$ctr = 0;
$numrows = mysql_num_rows($result);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
        $json .= "    {\n";
    $json .= "     \"id\": \"". $row['id'] ."\",\n";
    $json .= "     \"lon\": \"". $row['lon'] ."\",\n";
    $json .= "     \"lat\": \"". $row['lat'] ."\",\n";
    $json .= "     \"road\": \"". $row['road'] ."\" \n";
    $json .= "    }";
    $ctr++;
    $json .= ($ctr < $numrows) ? ",\n" : "\n" ;
}
$json .= "}";
echo $json;

1 个答案:

答案 0 :(得分:6)

JSON当然不是XML。如果省略Content-type标头或将其设置为例如text / plain浏览器将呈现它。但是,当前的内容类型是正确的。安装JSONView extension以便能够在浏览器中查看json而不是获取下载窗口。

除此之外,永远不会使用字符串函数构建JSON 。 PHP有json_encode(),它接受​​一个object / array / ..并返回一个有效的JSON字符串。所以你的代码应该是这样的:

header('Content-Type: application/json');
$rows = array();
while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
    $rows[] = $row;
}
echo json_encode($rows);