【问题标题】:output json with database输出带有数据库的json
【发布时间】:2014-11-23 15:25:25
【问题描述】:

对不起我的英语。我正在尝试将数据输出到数据库格式 json。它似乎做的一切都是正确的,但它不是真正的输出。这是我获得的链接:http://ksupulse.tk/get_all.php 如果我确实检查了网站的有效性 http://jsonlint.com/http://jsonformatter.curiousconcept.com/ 会出错。

get_all.php

<?php 

header('Content-Type: application/json; charset=utf-8');

?>

<?php


$response = array();

require 'db_connect.php';

$db = new DB_CONNECT();

$result = mysql_query("SELECT * FROM demo") or die(mysql_error());

if (mysql_num_rows($result) > 0) {

    $response["demo"] = array();

    while ($row = mysql_fetch_array($result)) {
        $product = array();
        $product["id"] = $row["id"];
        $product["name"] = $row["name"];
        $product["detaly"] = $row["detaly"];

        array_push($response["demo"], $product);
    }
    $response["success"] = 1;


    echo json_encode($response);

} else {
    $response["success"] = 0;
    $response["message"] = "No products found";

    echo json_encode($response);
}
?>

老实说,我花了很多时间寻找这个问题,但没有找到答案。都一样,为什么我打印到数据库的不是json? DB编码的utf_unicode_ci,以及utf8_general_ci中的表

【问题讨论】:

  • 你能发布结果输出吗?
  • 你能发布一段它回显的数据吗? json_encode 应该创建一个有效的 json 对象(或者 FALSE 如果它失败了)。代码看起来应该可以工作。
  • 另外,请停止使用已弃用的mysql_ api,查看PDOmysqli 以获取推荐使用的较新的api。
  • @BobBrown 是的,当然。在ksupulse.tk/get_all.php 输出{"demo":[{"id":"3","name":"123123","detaly":"123123123"},{"id":"4","name":"4444","detaly":"555555"}],"success":1} 如果我把一个链接到验证器,写 Unexpected token
  • 这看起来对我来说是正确的,虽然人眼不是 JSON 的良好解析器。哪个验证器给出了错误?

标签: php mysql json database


【解决方案1】:

在您的 { } 序列前面有一个多余的回车(这本身是有效的)。

您不应该关闭?&gt;,然后在header 指令之后重新打开您的脚本&lt;?php。 它将垃圾输出到浏览器。您确实希望您的流以{ 第一个字符开头。

换句话说(对于@KnightRider)应该删除脚本的第 5-7 行!

05 ?>
06
07 <?php

【讨论】:

    【解决方案2】:

    很抱歉回答这个问题是因为我无法尝试但必须写下我的观点

    您好,我已经检查了您在评论中发布的内容,JSONlint 将其验证为有效的 JSON

    {"demo":[{"id":"3","name":"123123","detaly":"123123123"},{"id":"4","name":"4444‌​‌​","detaly":"555555"}],"success":1}
    

    你还需要什么?

    【讨论】:

    • 见我上面的回答:JSON 本身是有效的,但是 PHP 脚本输出了无关的前导空格。
    • 嗨@Gabriel,对不起,我听不懂,请详细说明并标记回车所在的位置。!
    • 文件开始于:&lt;?php header('Content-Type: application/json; charset=utf-8'); ?&gt; &lt;?php $response = array(); 这是错误的。应该是:&lt;?php header('Content-Type: application/json; charset=utf-8'); $response = array();
    • @Gabriel 我在&lt;?php header('Content-Type: application/json; charset=utf-8'); $response = array(); 上更改了&lt;?php header('Content-Type: application/json; charset=utf-8'); ?&gt; &lt;?php $response = array();,但它仍然不起作用(验证器是输出意外令牌,其他验证器输出 URL 字段不是 json
    • 并且在您的输出流中,在 json 周围的 { } 括号前后仍然有无关字符...如果您使用十六进制编辑器打开流,您会看到它以这个开头序列:EF BB BF EF BB BF 在您打开 { 之前。也许删除标题中的charset=utf8?因为通常情况下,JSON 不是 utf8。它使用 UTF8 字符的表示,但应该是 ASCII 可读的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    相关资源
    最近更新 更多