web-dev-qa-db-fra.com

json_encode sparse PHP array en tant que tableau JSON, pas d'objet JSON

J'ai le tableau suivant en PHP:

_Array
(
    [0] => Array
        (
            [id] => 0
            [name] => name1
            [short_name] => n1
        )

    [2] => Array
        (
            [id] => 2
            [name] => name2
            [short_name] => n2
        )
)
_

Je veux l'encoder en tant que tableau JSON, produisant une chaîne comme celle-ci:

_[  
    {  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    {  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
]
_

Mais quand j'appelle json_encode sur ce tableau, j'obtiens ce qui suit:

_{  
    "0":{  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    "2":{  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
}
_

qui est un objet au lieu d'un tableau.

Comment puis-je obtenir _json_encode_ coder mon tableau en tant que tableau, à la place?

112
user677607

Vous observez ce comportement parce que votre tableau n'est pas séquentiel - il a les clés _0_ et _2_, mais n'a pas _1_ en tant que clé.

Avoir juste des index numériques ne suffit pas. _json_encode_ ne codera votre tableau PHP sous forme de tableau JSON que si votre tableau PHP est séquentiel - autrement dit, si ses clés sont 0, 1, 2, 3,. ..

Vous pouvez réindexer votre tableau séquentiellement à l'aide de la fonction array_values pour obtenir le comportement souhaité. Par exemple, le code ci-dessous fonctionne correctement dans votre cas d'utilisation:

_echo json_encode(array_values($input)).
_
179
Nguyen Van Vinh

Array dans JSON sont des tableaux indexés niquement, la structure que vous essayez d'obtenir n'est donc pas valide Json/Javascript.

Les tableaux d'associations PHP sont des objets au format JSON. Par conséquent, à moins que vous n'ayez pas besoin de l'index, vous ne pouvez pas effectuer de telles conversions.

Si vous voulez avoir une telle structure, vous pouvez faire:

$indexedOnly = array();

foreach ($associative as $row) {
    $indexedOnly[] = array_values($row);
}

json_encode($indexedOnly);

Will retourne quelque chose comme:

[
     [0, "name1", "n1"],
     [1, "name2", "n2"],
]
73
Boris Guéry

json_decode ($ jsondata, true);

true transforme toutes les propriétés en tableau (séquentiel ou non)

0
Robert Sinclair