如何使用PHP正确输出JSON数据

时间:2013-05-17 01:32:58

标签: php android json

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

这是我在输出中得到的: My response

我希望它显示为Twitter响应:

Twitter's JSON response

我假设我的回复没有被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应用程序可以正确解析它。

8 个答案:

答案 0 :(得分:16)

您的问题实际上很容易解决。如果Content-Type标头设置为application / json,则Chrome JSON Formatter插件仅格式化您的输出。

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

答案 1 :(得分:5)

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

E.g。

echo json_encode($my_array, JSON_PRETTY_PRINT);

答案 2 :(得分:3)

您可以将参数传递给json_encode函数,如下所示:

echo json_encode($response, JSON_PRETTY_PRINT);

PHP 5.2.0 =&gt; http://php.net/manual/en/function.json-encode.php

答案 3 :(得分:1)

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

以下是另一种以HTML格式显示JSON的方法。

如果您将回复包装在HTML&lt;前&gt;标记您将保留空白格式。

例如,我使用jQuery获取一些json数据,并在jQuery中获取json对象并将其直接放在&lt;前&gt;格式化

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

我用

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

这将使你的json返回,用HTML格式的空格格式化&lt;前&gt;可以像你想要的那样用来格式化它。

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

答案 4 :(得分:0)

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

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

当我在镀铬中看到它时,我首先相信了同样的事情。它也发生在我身上。

答案 5 :(得分:0)

只需添加预标签 - &gt;

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

echo json_encode($response, JSON_PRETTY_PRINT);

添加pre-Tag和JSON_PRETTY_PRINT后我确定你的问题会解决。

答案 6 :(得分:0)

<强> Laravel

设置标题header('Content-Type: application/json');或json PRETTY_PRINT不起作用?

您需要white-space: pre-wrap;

的一点点css

您是将json从控制器或路由器转储到空白页?

Route::get('/print-json', function (Request $request) {
    echo '<style>body{ white-space: pre-wrap; }</style>';
    echo json_encode([
        'IP' => $request->getClientIp(),
        'Route' => $request->route(),
    ], JSON_PRETTY_PRINT);
});

输出:

{
    "IP": "127.0.0.1",
    "Route": {
        "uri": "showArray",
        "methods": [
            "GET",
            "HEAD"
        ],
        "action": {
            "middleware": "web",
            "uses": {},
            "namespace": "App\\Http\\Controllers",
            "prefix": null,
            "where": []
        },
        "isFallback": false,
        "controller": null,
        "defaults": [],
        "wheres": [],
        "parameters": [],
        "parameterNames": [],
        "computedMiddleware": [
            "web"
        ],
        "compiled": {}
    }
}

答案 7 :(得分:0)

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

echo json_encode($response_date, JSON_PRETTY_PRINT);

print json_encode($response_date, JSON_PRETTY_PRINT);

您可以访问this link,以详细了解如何使用json_encode

希望有帮助。