Funkcje JSON
PHP Manual

json_decode

(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decodeDekoduje łańcuch JSON

Opis

mixed json_decode ( string $json [, bool $asocjacyjnie = false [, int $poziom_zagłębienia = 512 [, int $opcje = 0 ]]] )

Konwertuje łańcuch JSON do zmiennej PHP.

Parametry

json

Dekodowany json string.

Ta funkcja działa tylko z danymi w kodowaniu znaków UTF-8.

asocjacyjnie

Gdy jest ustawiony na TRUE, zwracane obiekty zostaną przekonwertowane do tablic asocjacyjnych.

poziom_zagłębienia

Limit zagnieżdżania danych określony przez użytkownika.

opcje

Maska bitowa - opcje dekodowania JSON. Obecnie obsługiwana jest tylko JSON_BIGINT_AS_STRING (domyślnie jest rzutowanie typów large integer na float)

Ta zmiana istnieje w wersji testowej PHP, i będzie prawdopodobnie istniała w nowszych wersjach niż PHP 5.3.

Zwracane wartości

Zwraca wartość zakodowaną w json w odpowiednim typie PHP. Wartości true, false i null (niezależnie od wielkości liter) są zwracane odpowiednio jako TRUE, FALSE i NULL. NULL jest zwracany jeśli parametr json nie może zostać odkodowany, lub jeżeli zakodowane dane znajdują się głębiej niż ustalony limit zagnieżdżania.

Przykłady

Przykład #1 Przykład json_decode()

<?php
$json 
'{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($jsontrue));

?>

Powyższy przykład wyświetli:

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

Przykład #2 Inny przykład

<?php

$json 
'{"foo-bar": 12345}';

$obj json_decode($json);
print 
$obj->{'foo-bar'}; // 12345

?>

Przykład #3 Różne przykłady błędów json_decode()

<?php

// poniższe łańcucy są prawidłowe w JavaScript, ale nieprawidłowe w JSON

// nazwa i wartość musi być zawarta w podwójny cudzysłów
// pojedyńcze cudzysłowy nie są prawidłowe
$bad_json "{ 'bar': 'baz' }";
json_decode($bad_json); // null

// nazwa musi być zawarta w podwójny cudzysłów
$bad_json '{ bar: "baz" }';
json_decode($bad_json); // null

// przecinki na końcu nie są dozwolone
$bad_json '{ bar: "baz", }';
json_decode($bad_json); // null

?>

Przykład #4 Błędy - poziom zagłębienia

<?php
// Kodowanie danych.
$json json_encode(
    array(
        
=> array(
            
'English' => array(
                
'One',
                
'January'
            
),
            
'Polish' => array(
                
'Jeden',
                
'Styczeń'
            
)
        )
    )
);

// Określenie błędów.
$json_errors = array(
    
JSON_ERROR_NONE => 'Nie wystąpił żaden błąd',
    
JSON_ERROR_DEPTH => 'Przekroczono maksymalny poziom zagłębienia',
    
JSON_ERROR_CTRL_CHAR => 'Błąd zanku sterującego, prawdopodobnie nieprawidłowo zakodowany',
    
JSON_ERROR_SYNTAX => 'Błąd składni',
);

// Pokaż błędy na różych poziomach zagłębienia.
foreach(range(43, -1) as $depth) {
    
var_dump(json_decode($jsonTrue$depth));
    echo 
'Ostatni błąd : '$json_errors[json_last_error()], PHP_EOLPHP_EOL;
    }
?>

Powyższy przykład wyświetli:

array(1) {
  [1]=>
  array(2) {
    ["English"]=>
    array(2) {
      [0]=>
      string(3) "One"
      [1]=>
      string(7) "January"
    }
    ["Polish"]=>
    array(2) {
      [0]=>
      string(3) "Jeden"
      [1]=>
      string(7) "Styczeń"
    }
  }
}
Ostatni błąd : Nie wystąpił żaden błąd

NULL
Ostatni błąd : Przekroczono maksymalny poziom zagłębienia

Przykład #5 Dekodowanie json_decode() - large integers

<?php
$json 
'12345678901234567890';

var_dump(json_decode($json));
var_dump(json_decode($jsonfalse512JSON_BIGINT_AS_STRING));

?>

Powyższy przykład wyświetli:

float(1.2345678901235E+19)
string(20) "12345678901234567890"

Notatki

Informacja:

Specyfikacja JSON nie jest taka sama jak w JavaScript, tylko jest podzbiorem JavaScript.

Informacja:

W przypadku niepowodzenia dekodowania danych funkcja json_last_error() może zostać użyta do ścisłego ustalenia rodzaju błędu.

Rejestr zmian

Wersja Opis
Zmiany w przyszłości Dodano parametr opcje.
5.3.0 Dodano opcjonalny parametr poziom_zagłębienia. Domyślny limit zagnieżdżania danych został zwiększony z 128 do 512
5.2.3 Limit zagnieżdżania danych został zwiększony z 20 do 128

Zobacz też:


Funkcje JSON
PHP Manual