JSON结果可以保存

Jai*_*iro 1 javascript php 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;

Thi*_*ter 6

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

除此之外,永远不要使用字符串功能构建JSON.PHP有json_encode()一个对象/数组/ ..并返回一个有效的JSON字符串.所以你的代码应该是这样的:

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