web-dev-qa-db-ja.com

PHPを使用して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 Formatterとmy Android AppがJSONデータを正しく解析できるように、JSONデータを正しく表示する方法を知りたいです。

14
Oscar Swanros

あなたの問題は実際には非常に簡単に解決できます。 Chrome JSON Formatterプラグインは、Content-Typeヘッダーがapplication/jsonに設定されている場合にのみ出力をフォーマットします。

コードで変更する必要があるのは、jsonでエンコードされたデータを返す前にPHP=コードでheader('Content-Type: application/json');を使用することだけです。

16

PHPの json_encode 関数は、$optionsの2番目の引数を取ります。ここでは、JSON_PRETTY_PRINTを使用して、Twitter APIで表示されるように印刷できます。

例えば。

echo json_encode($my_array, JSON_PRETTY_PRINT);
5
jraede

次のようにjson_encode関数に引数を渡すことができます。

echo json_encode($response, JSON_PRETTY_PRINT);

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

3
Strategio

JSONは最初の画像のようでなければなりません。すべてが1行にまとめられました。出力をjsonlint.comに渡すと、タイプミス/不良データを見つけるのに役立ちます。現在のその他すべての回答も、問題の解決に役立ちます。あなたが本当にそれをしたいのであれば、それらはすべてあなたに出力をフォーマットするための異なるオプションを提供します。

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/ または他の強調表示システムを使用できます...

1
Jessycormier

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": {}
    }
}
0
fayz

事前タグを追加するだけ->

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

そして

echo json_encode($response, JSON_PRETTY_PRINT);

pre-TagとJSON_PRETTY_PRINTを追加すると、問題が解決するはずです。

0
Vijay Bheda

JSONレスポンスはすでに良好な状態です。表示している応答はChromeブラウザです。そのため、そのように見えます。以下の行をyoruコードで追加すると

var_dump($response);を右クリック->ソースを表示chrome brower、ツリー構造が表示されます。とにかくJSON応答をコピーして有効性を確認できます ここで

chromeで見たとき、私が最初に信じていたもの。それは私にも起こります。

0
Yogus