web-dev-qa-db-fra.com

Comment sortir correctement les données JSON en utilisant PHP

Je développe une application Android et, pour l'API, j'envoie mes demandes à une URL qui devrait renvoyer des données JSON.

C’est ce que j’obtiens dans ma sortie: My response

Et j'aimerais que cela soit affiché comme réponse Twitter:

Twitter's JSON response

Je suppose que ma réponse n'est pas analysée par l'extension JSON Formatter Chrome, car elle est mal codée. Mon application ne peut donc pas obtenir les valeurs dont j'ai besoin.

Voici mon code 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);

}

?>

Je souhaite savoir comment afficher correctement les données JSON afin que JSON Formatter et mon application Android puissent les analyser correctement.

14
Oscar Swanros

Votre problème est en réalité très facile à résoudre. Le plug-in Chrome JSON Formatter ne formate votre sortie que si l'en-tête Content-Type est défini sur application/json.

La seule chose que vous devez modifier dans votre code est d'utiliser header('Content-Type: application/json'); dans votre code PHP, avant de renvoyer les données codées en json.

16
Charles Sarrazin

La fonction json_encode de PHP prend un second argument, pour $options. Ici, vous pouvez utiliser JSON_PRETTY_PRINT pour l’imprimer comme vous le voyez dans l’API de Twitter.

Par exemple. 

echo json_encode($my_array, JSON_PRETTY_PRINT);
5
jraede

Vous pouvez passer un argument à la fonction json_encode comme ceci:

echo json_encode($response, JSON_PRETTY_PRINT);

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

3
Strategio

Votre JSON devrait ressembler à votre première image. Tout en une ligne écrasés ensemble. Vous pouvez transmettre votre sortie à jsonlint.com, ce qui peut vous aider à trouver vos données de frappe/mauvaise. TOUTES les autres réponses actuelles pourraient également vous aider à résoudre votre problème. ils vous donnent tous différentes options pour formater votre sortie si vous voulez vraiment le faire.

Voici un autre moyen d'afficher votre JSON en HTML.

Si vous encapsulez votre réponse dans les balises HTML <pre>, vous conserverez le format d'espace blanc.

Par exemple, j'utilise jQuery pour obtenir des données json et, dans jQuery, prends l'objet json et le place directement dans un <pre> formaté

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

J'utilise 

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

Cela prendra votre retour json, formatez-le avec des espaces avec le HTML que <pre> peut utiliser pour le formater comme vous le souhaitez.

Si vous voulez avoir votre code couleur JSON ... vous pouvez utiliser http://prismjs.com/ ou tout autre système de surbrillance ...

1
Jessycormier

Laravel

La définition de l'en-tête header('Content-Type: application/json'); ou json PRETTY_PRINT n'a pas fonctionné?

Un peu de css est ce dont vous avez besoin white-space: pre-wrap;

Vous effectuez un dumping sur une page vierge du contrôleur ou du routeur?

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);
});

Sortie:

{
    "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
Faiz Khan

il suffit d'ajouter pré-tag -> 

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

et 

echo json_encode($response, JSON_PRETTY_PRINT);

après avoir ajouté les pré-tags et JSON_PRETTY_PRINT, je suis sûr que votre problème sera résolu.

0
Vijay Bheda

Votre réponse JSON est déjà en bon état. La réponse que vous consultez est dans le navigateur Chrome. C'est pourquoi ça ressemble à ça. Si vous ajoutez la ligne ci-dessous dans votre code

var_dump($response); puis rightclick -> voir la source en chrome brower, vous verrez l’arborescence. Quoi qu'il en soit, vous pouvez copier votre réponse JSON et vérifier la validité ici

La même chose que je crois d'abord quand je l'ai vue en chrome. Cela m'arrive aussi.

0
Yogus