json_decode

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

json_decodeConvertește într-o variabilă un șir reprezentat JSON

Descrierea

json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] ) : mixed

Preia un șir de caractere reprezentat JSON și îl convertește într-o variabilă PHP.

Parametri

json

Șirul (string) reprezentat json care trebuie convertit.

Această funcție operează doar cu șiruri codificate în UTF-8.

Notă:

PHP implementează un superset al JSON, după cum este specificat în documentul » RFC 4627 original; de asemenea el va codifica și va decodifica tipuri scalare și NULL. RFC 4627 susține aceste valori doar atunci când ele sunt încorporate într-un tablou sau obiect.

Cu toate că acest superset este consecvent cu definiția extinsă de "text JSON" din noul » RFC 7159 (care are ca scop să înlocuiască RFC 4627) și ECMA-404, aceasta poate cauza probleme de interoperabilitate cu interpretorii JSON mai vechi care aderă strict la RFC 4627 la codificarea unei singure valori scalare.

assoc

Dacă specificați TRUE, obiectul va fi convertit într-un array asociativ.

depth

Limita adâncimii de imbricare specificată de utilizator.

options

Masca de biți a opțiunilor de decodificare JSON. în prezent este susținută doar JSON_BIGINT_AS_STRING (în mod implicit numerele întregi mari se transformă în numere cu virgulă flotantă)

Valorile întoarse

Întoarce valoarea codificată în json cu tipul PHP corespunzător. Valorile true, false și null sunt întoarse ca TRUE, FALSE și NULL respectiv. NULL este întors dacă parametrul json nu poate fi decodificat sau dacă datele pentru codificare sunt mai adânci decât limita de imbricare.

Exemple

Example #1 Exemple json_decode()

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

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

?>

Exemplul de mai sus va afișa:

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)
}

Example #2 Accesarea proprietăților nevalide ale unui obiect

Accesarea elementelor dintr-un obiect, care conțin caractere nepermise conform convenției de denumiri PHP (de ex. liniuța), poate fi realizată prin încapsularea denumirii elementului între paranteze figurate și apostrofuri.

<?php

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

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

?>

Example #3 Greșeli tipice la utilizarea json_decode()

<?php

// următoarele șiruri sunt valide în JavaScript, dar nu sunt valide în JSON

// denumirea și valoarea trebuie să fie cuprinse între ghilimele duble
// ghilimelele singulare nu sunt valide
$bad_json "{ 'bar': 'baz' }";
json_decode($bad_json); // null

// denumirea trebuie să fie cuprinsă între ghilimele duble
$bad_json '{ bar: "baz" }';
json_decode($bad_json); // null

// virgule în plus la sfârșit nu sunt permise
$bad_json '{ bar: "baz", }';
json_decode($bad_json); // null

?>

Example #4 Erori la parametrul depth

<?php
// Codificarea datelor.
$json json_encode(
    array(
        
=> array(
            
'English' => array(
                
'One',
                
'January'
            
),
            
'French' => array(
                
'Une',
                
'Janvier'
            
)
        )
    )
);

// Definirea erorilor.
$constants get_defined_constants(true);
$json_errors = array();
foreach (
$constants["json"] as $name => $value) {
    if (!
strncmp($name"JSON_ERROR_"11)) {
        
$json_errors[$value] = $name;
    }
}

// Arată erorile pentru diferite adâncimi.
foreach (range(43, -1) as $depth) {
    
var_dump(json_decode($jsontrue$depth));
    echo 
'Last error: '$json_errors[json_last_error()], PHP_EOLPHP_EOL;
}
?>

Exemplul de mai sus va afișa:

array(1) {
  [1]=>
  array(2) {
    ["English"]=>
    array(2) {
      [0]=>
      string(3) "One"
      [1]=>
      string(7) "January"
    }
    ["French"]=>
    array(2) {
      [0]=>
      string(3) "Une"
      [1]=>
      string(7) "Janvier"
    }
  }
}
Last error: JSON_ERROR_NONE

NULL
Last error: JSON_ERROR_DEPTH

Example #5 json_decode() cu numere întregi mari

<?php
$json 
'{"number": 12345678901234567890}';

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

?>

Exemplul de mai sus va afișa:

object(stdClass)#1 (1) {
  ["number"]=>
  float(1.2345678901235E+19)
}
object(stdClass)#1 (1) {
  ["number"]=>
  string(20) "12345678901234567890"
}

Note

Notă:

Specificația JSON nu este JavaScript, ci un subset al JavaScript.

Notă:

În cazul decodificării cu eșec funcția json_last_error() poate fi utilizată pentru a determina natura exactă a erorii.

Istoricul schimbărilor

Versiune Descriere
5.6.0 Variantele cuvintelor-cheie true, false și null care nu sunt scrise în întregime cu litere minuscule nu mai sunt acceptate ca date de intrare valide și vor genera avertismente.
5.4.0 A fost adăugat parametrul options.
5.3.0 A fost adăugat parametrul opțional depth. Limita de imbricare implicită a fost mărită de la 128 la 512.
5.2.3 Limita de imbricare a fost mărită de la 20 la 128.
5.2.1 A fost adăugată susținerea decodificării JSON a tipurilor de bază.

A se vedea și