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

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

这是我得到我的输出: 我的回复

我想将它显示为Twitter响应:

Twitter的JSON响应

我假设我的响应没有被JSON Formatter Chrome扩展插件parsing,因为它的编码不好,所以我的应用程序无法获得我需要的值。

这是我的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格式化程序和我的Android应用程序可以正确parsing它。

Solutions Collecting From Web of "如何使用PHP正确输出JSON数据"

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

你需要改变你的代码唯一的事情是使用header('Content-Type: application/json'); 在你的PHP代码中,在返回json编码的数据之前。

对于$options ,PHP的json_encode函数需要第二个参数。 在这里,您可以使用JSON_PRETTY_PRINT来打印它,就像您在Twitter API中看到的一样

例如

 echo json_encode($my_array, JSON_PRETTY_PRINT); 

你可以像这样传递一个参数给json_encode函数:

 echo json_encode($response, JSON_PRETTY_PRINT); 

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

你的JSON应该像你的第一个图像; 所有在一条线上一起挤压。 您可以将您的输出传递给jsonlint.com,这可以帮助您find您的拼写错误/错误数据。 所有目前的其他答案也可以帮助你解决你的问题。 他们都给你不同的选项来格式化你的输出,如果你真的想这样做。

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

如果你用HTML <pre>标签包装你的回复,你会保持白色格式。

例如,我使用jQuery来获取一些json数据,在jQuery中把json对象直接放在一个格式化的<pre>中

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

我用

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

这将把你的JSON返回,用HTML格式的空格格式<pre>可以用来格式化它,就像你想看到的一样。

如果你想让你的json颜色编码…你可以使用http://prismjs.com/或任何其他高亮系&#x7EDF;…

你的JSON响应已经很好。 您正在查看的响应是在Chrome浏览器中。 这就是为什么看起来像这样。 如果你在yoru代码中添加下面的行

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

当我看到它在铬中时,我首先相信。 它也发生在我身上。

只需添加预标签 – >

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

 echo json_encode($response, JSON_PRETTY_PRINT); 

添加预标签和JSON_PRETTY_PRINT后,我相信你的问题将解决。

Laravel

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

一点点的CSS是你需要white-space: pre-wrap;

你是从控制器或路由器转储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": {} } }