我正在开发一个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应用程序可以正确解析它。
答案 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;
您是将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
。
希望有帮助。