【问题标题】:How to output JSON data correctly using PHP如何使用 PHP 正确输出 JSON 数据
【发布时间】:2013-05-12 02:15:13
【问题描述】:

我正在开发一个 Android 应用,对于 API,我将我的请求发送到应该返回 JSON 数据的 URL。

这是我在输出中得到的:

我希望它显示为 Twitter 响应:

我假设我的响应没有被 JSON Formatter Chrome 扩展解析,因为它的编码错误,因此我的应用无法获得我需要的值。

这是我的 PHP 代码:

<?php

$response = array();

if (isset($_POST['name']) && isset($_POST['price']) && isset($_POST['description'])) 
{

    $name = $_POST['name'];
    $price = $_POST['price'];
    $description = $_POST['decription'];

    require_once __DIR__ . '/db_connect.php';

    $db = new DB_CONNECT();

    $result = mysql_query("INSER INTO products(name, price, description) VALUES('$name', '$price', '$description')");

    if ($result) {
        $response["success"] = 1;
        $response["message"] = "Product successfully created.";

        echo json_encode($response);
    } else {

        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred!";

        echo json_encode($response);
        }
} else {

    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    echo json_encode($response);

}

?>

我想知道如何正确显示 JSON 数据,以便 JSON Formatter 和我的 android App 可以正确解析它。

【问题讨论】:

  • 可能是错字,但您的插入查询以 INSER 开头。
  • 如果您发布您的实际结果 JSON,而不是图片,这将更加有用。
  • 我对 PHP 的 JSON 输出不是很熟悉,但我很好奇我可以在你的第二张截图中看到一个“原始”和“解析”函数,这不是一些 javascript 函数吗?实际上是格式化输出吗?所以说你做了一个漂亮的打印,那不会增加你的页面数据大小并且它不应该是用户想要的吗?
  • @ChorWaiChun 这就是 JSON Formatter Chrome 扩展的实际应用。

标签: php android json


【解决方案1】:

你的问题其实很容易解决。只有在 Content-Type 标头设置为 application/json 时,Chrome JSON Formatter 插件才会格式化您的输出。

在您的代码中唯一需要更改的是在您的 PHP 代码中使用 header('Content-Type: application/json');,然后返回 json 编码的数据。

【讨论】:

  • 我知道这个问题具体说明了 chrome 等,但我发现要让它在 FF 中工作,我必须使用 header('Content-Type: application/json'); 而不是 header('Content-Type', 'application/json');(用冒号替换逗号)跨度>
  • 是的,我打错了。我刚才才注意到。谢谢! ;)
  • @OscarSwanros,您能否将问题标记为已解决?谢谢! :)
【解决方案2】:

PHP 的json_encode 函数接受第二个参数,即$options。在这里你可以使用JSON_PRETTY_PRINT 来打印它,就像你在 Twitter API 中看到的那样

例如

echo json_encode($my_array, JSON_PRETTY_PRINT);

【讨论】:

    【解决方案3】:

    您可以像这样将参数传递给json_encode 函数:

    echo json_encode($response, JSON_PRETTY_PRINT);
    

    PHP 5.2.0 => http://php.net/manual/en/function.json-encode.php

    【讨论】:

    • 显然,JSON_PRETTY_PRINT 仅在 PHP 5.4+ 上可用,服务器运行 5.2。
    • 你是对的!我发现这个类 PRETTY_JSON http://pastebin.com/xB0fG9py。我没有对其进行测试,但您可以从中获得灵感。
    【解决方案4】:

    你的 JSON 应该和你的第一张图片一样;一条线全部挤在一起。您可以将输出传递给 jsonlint.com,它可以帮助您找到错字/错误数据。当前所有其他答案也可以帮助您解决问题。如果您真的想这样做,它们都会为您提供不同的选项来格式化输出。

    这是您在 HTML 中显示 JSON 的另一种方式。

    如果您将响应包装在 HTML

     标记中,您将保留空格格式。
    
    

    例如,我使用 jQuery 获取一些 json 数据,并在 jQuery 中获取 json 对象并将其直接放入格式化的

    <pre class="output" style="text-align:left; width:80%; margin:0 auto">[ results ]</pre>
    

    我用

    $('.output').html( JSON.stringify(data,null,4) );
    

    这将获取您的 json 返回,并使用 HTML

     的空格对其进行格式化,以便按照您想要的方式对其进行格式化。
    
    

    如果您想对 json 进行颜色编码...您可以使用 http://prismjs.com/ 或任何其他突出显示系统...

    【讨论】:

      【解决方案5】:

      您的 JSON 响应已经处于良好状态。您正在查看的回复在 Chrome 浏览器中。这就是为什么它看起来像这样。如果您在 yoru 代码中添加以下行

      var_dump($response); 然后右键单击 -> 在 chrome 浏览器中查看源代码,您将看到树形结构。无论如何,您可以复制您的 JSON 响应并检查有效性 here

      当我在 chrome 中看到它时,我首先相信的是同样的东西。这也发生在我身上。

      【讨论】:

        【解决方案6】:

        只需添加 pre Tag -->

        <pre><?php  ---you`r code---     ?> </pre>
        

        echo json_encode($response, JSON_PRETTY_PRINT);
        

        添加 pre-Tag 和 JSON_PRETTY_PRINT 后,我相信您的问题会解决。

        【讨论】:

          【解决方案7】:

          您所要做的就是像这样向json_encode 方法添加第二个参数。

          echo json_encode($response_date, JSON_PRETTY_PRINT);
          

          print json_encode($response_date, JSON_PRETTY_PRINT);
          

          您可以访问this link 了解更多关于如何使用json_encode 的信息。

          希望对你有帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-06-05
            • 2016-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-21
            • 1970-01-01
            相关资源
            最近更新 更多