31 votes

Générer une chaîne json à partir de données de tableaux multidimensionnels

J'utilise un plugin qui nécessite un tableau de lignes associatives sous forme de chaîne formatée en json - quelque chose comme.. :

[
    {oV: 'myfirstvalue', oT: 'myfirsttext'},
    {oV: 'mysecondvalue', oT: 'mysecondtext'}
]

Comment convertir mon tableau multidimensionnel en une sortie JSON valide en utilisant PHP ?

69voto

Pascal MARTIN Points 195780

Une fois que vous avez vos données PHP, vous pouvez utiliser la fonction json_encode Elle est fournie avec PHP depuis PHP 5.2.

Dans votre cas, votre chaîne JSON représente :

  • une liste contenant 2 éléments
  • chacun étant un objet, contenant 2 propriétés/valeurs

En PHP, cela créerait la structure que vous représentez :

$data = array(
    (object)array(
        'oV' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    (object)array(
        'oV' => 'mysecondvalue',
        'oT' => 'mysecondtext',
    ),
);
var_dump($data);

Le site var_dump vous obtient :

array
  0 => 
    object(stdClass)[1]
      public 'oV' => string 'myfirstvalue' (length=12)
      public 'oT' => string 'myfirsttext' (length=11)
  1 => 
    object(stdClass)[2]
      public 'oV' => string 'mysecondvalue' (length=13)
      public 'oT' => string 'mysecondtext' (length=12)

Et, l'encodage en JSON :

$json = json_encode($data);
echo $json;

Vous obtenez :

[{"oV":"myfirstvalue","oT":"myfirsttext"},{"oV":"mysecondvalue","oT":"mysecondtext"}]

Au fait, si je me souviens bien, je dirais que votre chaîne JSON n'est pas une donnée JSON valide : la chaîne doit être entourée de guillemets, y compris les noms des propriétés des objets.

Voir http://www.json.org/ pour la grammaire.

17voto

Amber Points 159296

La méthode la plus simple serait probablement de commencer par un tableau associatif des paires que vous voulez :

$data = array("myfirstvalue" => "myfirsttext", "mysecondvalue" => "mysecondtext");

puis utiliser un foreach et une concaténation de chaînes :

$jsontext = "[";
foreach($data as $key => $value) {
    $jsontext .= "{oV: '".addslashes($key)."', oT: '".addslashes($value)."'},";
}
$jsontext = substr_replace($jsontext, '', -1); // to get rid of extra comma
$jsontext .= "]";

Si vous disposez d'une version récente de PHP, vous pouvez utiliser les fonctions d'encodage json intégrées - faites simplement attention aux données que vous leur transmettez pour qu'elles correspondent au format attendu.

5voto

ennuikiller Points 28005

Cela devrait être utile : Génération de JSON

2voto

mickmackusa Points 18931

C'est l'une des règles les plus fondamentales du développement php :

NE PAS CONSTRUIRE MANUELLEMENT UNE CHAÎNE JSON. UTILISER json_decode() .

Si vous avez besoin de remplir vos données dans une boucle, rassemblez d'abord toutes vos données, puis appelez json_encode() juste une fois .

N'essayez pas d'envelopper/de préparer/d'ajouter des données supplémentaires à une chaîne json codée. Si vous voulez ajouter des données à la charge utile json, décodez-la, ajoutez les données, puis ré-encodez-la.

Il n'y a aucune différence si vous passez des données de type objet ou de type tableau à json_encode() -- par défaut, il créera toujours une chaîne en utilisant des accolades carrées pour les tableaux indexés et des accolades bouclées pour les données itérables avec des clés non indexées.

Code :

$array = [
    [
        'oV' => 'myfirstvalue',
        'oT' => 'myfirsttext'
    ],
    [
        'oV' => 'mysecondvalue',
        'oT' => 'mysecondtext'
    ]
];

echo json_encode($array);

Sortie :

[{"oV":"myfirstvalue","oT":"myfirsttext"},{"oV":"mysecondvalue","oT":"mysecondtext"}]

Pour plus de clarté, je dois préciser que la sortie souhaitée par le PO n'est pas un json valide car les clés imbriquées ne sont pas entourées de guillemets.

1voto

MashukKhan Points 907

Voici le code php pour générer le format json.

while ($row=mysqli_fetch_assoc($result))
{
    $array[] = $row;
}
echo '{"ProductsData":'.json_encode($array).'}'; //Here ProductsData is just a simple String u can write anything instead

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X