2013-03-08 14 views
8

Mam problem z wykorzystaniem json_encode do generowania łańcucha zakodowanego przez json z tablicy.Problem json_encode w PHP z tablicą 0 klucz

Odcinek tablicy w pytaniu wygląda to

RatingDistribution (Array, 11 elements) 
    0 (Array, 1 element) 
     0 (String, 3 characters) 4.5 
    1 (Array, 1 element) 
     1 (String, 4 characters) 11.9 
    2 (Array, 1 element) 

Ale daje to w ciągu:

"RatingDistribution":[["4.5"],{"1":"11.9"}, 

bym tego spodziewać:

"RatingDistribution":[{"0":"4.5"},{"1":"11.9"}, 

All I m robi to:

$result = json_encode($array); 

Czy zrobiłem coś złego, czy potrzebuję więcej kodu, aby upewnić się, że klucz 0 jest obecny?

Cheers Andy

+1

można pisać kod php, gdzie można uzyskać tablicę? lub wydrukować tablicę? Wygląda na to, że twój forearch jest zły. –

+0

Myślę, że wkręca się w drugi element (indeks 1), ponieważ jego podtablica zaczyna się od 1, a zatem zostaje zinterpretowana jako klucz łańcucha. – TFennis

Odpowiedz

-1

Cou może próbować rzucać klucza tablicy do łańcucha na przykład z strval lub (string).

+1

To powinien być komentarz! – sandip

+1

To była moja pierwsza myśl, ale nie robiło to różnicy, zamykając ją w cudzysłowie, ale robi bardzo niechlujne json :) –

14

Rezultat, który otrzymujesz, należy się spodziewać; json_encode wykrywa, że ​​używasz tylko klawiszy numerycznych w tablicy, więc tłumaczy to na tablicę zamiast na obiekt w JSON. Przez większość czasu właśnie to chcesz robić.

Jeśli z jakiegoś powodu nie (dlaczego?), W PHP> = 5,3 można użyć flagi JSON_FORCE_OBJECT aby uzyskać pożądany wynik:

$result = json_encode($array, JSON_FORCE_OBJECT); 
+0

zachowanie jest trochę dziwne, na przykład pierwsza wartość będzie dekodowana do tablicy, w której wszystkie kolejne wartości będą obiektami . –

+0

Podejrzewam, że będziemy musieli użyć JSON_FORCE_OBJECT –

+0

@ user2147830: Niezupełnie dziwne IMHO. Pierwszy klucz drugiej tablicy nie jest "0", co wystarczy, aby heurystyka zdecydowała "OK, to jest tablica asocjacyjna". – Jon

1

Jeśli chcesz korzystać z tablic w json następnie zamiast parametru JSON_FORCE_OBJECT możesz po prostu rzucić tablicę na obiekt.

Problem:

json_encode([0 => [1,2,3]]); // Return: [[1,2,3]] 
json_encode(["0" => [1,2,3]]); // Return: [[1,2,3]] 
json_encode([1 => [1,2,3]]); // Return: {"1":[1,2,3]} 

Nie to, czego oczekujemy:

json_encode([0 => [1,2,3]], JSON_FORCE_OBJECT); // Return: {"0":{"0":1,"1":2,"2":3}} 

Rozwiązanie:

json_encode((object)[0 => [1,2,3]]); // Return: {"0":[1,2,3]} 
json_encode(new \ArrayObject([0 => [1,2,3]])); // Return: {"0":[1,2,3]}