web-dev-qa-db-fra.com

Convertir une chaîne en objet JSON php

J'ai le résultat suivant d'une requête SQL:

{"Coords":[
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},
    {"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"} 
    ]
}

C'est actuellement une chaîne en php, existe-t-il un moyen simple de convertir cela en un objet JSON (je sais que c'est déjà au format JSON).

J'ai besoin que ce soit un objet pour pouvoir ajouter un élément/élément/objet supplémentaire comme ce que coords est déjà

EDIT: DÉSOLÉS MECS, JE PASSÉ UNE VIEILLE/MAUVAISE STRING!

56
user2363025

Ce que @deceze a dit est correct, il semble que votre JSON soit mal formé, essayez ceci:

{
    "Coords": [{
        "Accuracy": "30",
        "Latitude": "53.2778273",
        "Longitude": "-9.0121648",
        "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)"
    }, {
        "Accuracy": "30",
        "Latitude": "53.2778273",
        "Longitude": "-9.0121648",
        "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)"
    }, {
        "Accuracy": "30",
        "Latitude": "53.2778273",
        "Longitude": "-9.0121648",
        "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)"
    }, {
        "Accuracy": "30",
        "Latitude": "53.2778339",
        "Longitude": "-9.0121466",
        "Timestamp": "Fri Jun 28 2013 11:45:54 GMT+0100 (IST)"
    }, {
        "Accuracy": "30",
        "Latitude": "53.2778159",
        "Longitude": "-9.0121201",
        "Timestamp": "Fri Jun 28 2013 11:45:58 GMT+0100 (IST)"
    }]
}

Utilisez json_decode pour convertir String en Object (stdClass) ou en tableau: http://php.net/manual/en/function.json-decode.php

[édité]

Je ne comprenais pas ce que vous entendiez par "un objet JSON officiel" , mais supposons que vous vouliez ajouter du contenu à json via PHP puis le convertir à droite Retour à JSON?

en supposant que vous ayez la variable suivante:

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}';

Vous devriez le convertir en Object (stdClass):

$manage = json_decode($data);

Mais travailler avec stdClass est plus compliqué que PHP-Array, alors essayez ceci (utilisez le deuxième paramètre avec true):

$manage = json_decode($data, true);

De cette façon, vous pouvez utiliser des fonctions de tableau: http://php.net/manual/en/function.array.php

ajout d'un élément:

$manage = json_decode($data, true);

echo 'Before: <br>';
print_r($manage);

$manage['Coords'][] = Array(
    'Accuracy' => '90'
    'Latitude' => '53.277720488429026'
    'Longitude' => '-9.012038778269686'
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)'
);

echo '<br>After: <br>';
print_r($manage);

supprime le premier élément:

$manage = json_decode($data, true);
echo 'Before: <br>';
print_r($manage);
array_shift($manage['Coords']);
echo '<br>After: <br>';
print_r($manage);

toute chance que vous souhaitiez enregistrer en json dans une base de données ou un fichier :

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}';

$manage = json_decode($data, true);

$manage['Coords'][] = Array(
    'Accuracy' => '90'
    'Latitude' => '53.277720488429026'
    'Longitude' => '-9.012038778269686'
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)'
);

if (($id = fopen('datafile.txt', 'wb'))) {
    fwrite($id, json_encode($manage));
    fclose($id);
}

J'espère avoir compris votre question.

Bonne chance.

97

Pour convertir une chaîne JSON valide en retour, vous pouvez utiliser la méthode json_decode() .

Pour le reconvertir en objet, utilisez cette méthode:

$jObj = json_decode($jsonString);

Et pour le convertir en tableau associatif, définissez le deuxième paramètre sur true:

$jArr = json_decode($jsonString, true);

En passant, pour reconvertir votre chaîne mentionnée en une de celles-ci, vous devriez avoir une chaîne JSON valide. Pour y parvenir, vous devez procéder comme suit:

  1. Dans le tableau Coords, supprimez les deux " (guillemets) du début et de la fin de l'objet.
  2. Les objets d'un tableau sont séparés par des virgules (,), ajoutez donc des virgules entre les objets du tableau Coords.

Et vous aurez une chaîne JSON valide ..

Voici votre chaîne JSON que j'ai convertie en une chaîne valide: http://Pastebin.com/R16NVerw

16
Miro Markaravanes

vous pouvez utiliser ceci par exemple

$array = json_decode($string,true)

mais validez le Json avant. Vous pouvez valider à partir de http://jsonviewer.stack.hu/

6
Nabeel Arshad

Essayez avec json_encode().

Et regardez encore Valid JSON

0
drag.spas