Funcții JSON
PHP Manual

json_decode

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

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

Descrierea

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

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ă in superset al JSON - el de asemenea va codifica și va decodifica tipuri scalare și NULL. Standardul JSON susține astfel de valori doar când ele sunt încorporate într-un tablou sau obiect.

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 (indiferent de tipul caracterelor - minuscule sau majuscule) 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.

Istoria schimbărilor

Versiunea Descriere
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ă.

Vedeți de asemenea


Funcții JSON
PHP Manual