Obserwuj ten mały skrypt:
$array = array('stuff' => 'things');
print_r($array);
//prints - Array ( [stuff] => things )
$arrayEncoded = json_encode($array);
echo $arrayEncoded . "<br />";
//prints - {"stuff":"things"}
$arrayDecoded = json_decode($arrayEncoded);
print_r($arrayDecoded);
//prints - stdClass Object ( [stuff] => things )
Dlaczego PHP zamienia obiekt JSON w klasę?
Czy tablica, która json_encoded
wtedy nie powinna json_decoded
dawać DOKŁADNEGO tego samego wyniku?
daje tablicę.
źródło
Aby odpowiedzieć na rzeczywiste pytanie:
Przyjrzyj się bliżej wynikowi zakodowanego JSON, rozszerzyłem przykład, który OP daje trochę:
Format JSON wywodzi się z tego samego standardu co JavaScript ( standard języka programowania ECMAScript ) i jeśli spojrzeć na format, wygląda jak JavaScript. Jest to obiekt JSON (
{}
= obiekt ) posiadający właściwość „stuff” o wartości „things” oraz właściwość „things”, której wartością jest tablica ciągów ([]
= tablica ).JSON (jako JavaScript) nie zna tablic asocjacyjnych tylko tablice indeksowane. Więc kiedy JSON koduje tablicę asocjacyjną PHP, da to ciąg JSON zawierający tę tablicę jako „obiekt”.
Teraz ponownie dekodujemy JSON przy użyciu
json_decode($arrayEncoded)
. Funkcja dekodowania nie wie, skąd pochodzi ten ciąg JSON (tablica PHP), więc dekoduje do nieznanego obiektu, który znajduje sięstdClass
w PHP. Jak zobaczysz, tablica łańcuchów „things” BĘDZIE dekodowana do indeksowanej tablicy PHP.Zobacz także:
Dzięki https://www.randomlists.com/things za „rzeczy”
źródło
Chociaż, jak wspomniano, możesz dodać tutaj drugi parametr, aby wskazać, że chcesz zwrócić tablicę:
Wiele osób może zamiast tego rzucić wyniki:
Przeczytanie mogłoby być bardziej zrozumiałe.
źródło
tl; dr: JavaScript nie obsługuje tablic asocjacyjnych, dlatego też JSON.
W końcu to JSON, a nie JSAAN. :)
Więc PHP musi przekonwertować twoją tablicę na obiekt, aby zakodować w JSON.
źródło
Jeśli zdekodujesz json do tablicy, informacje zostaną utracone w tej sytuacji.
źródło
Istnieje również dobra biblioteka kodowania / dekodowania json w PHP 4 (która jest nawet kompatybilna wstecz z PHP 5), o której jest mowa w tym wpisie na blogu: Używanie json_encode () i json_decode () w PHP4 (czerwiec 2009) .
Konkretny kod autorstwa Michała Migurskiego i Matta Knappa:
źródło