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

# json_decode

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

json_decode — Converteș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($json, true));
?>`

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(
1 => 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(4, 3, -1) as $depth) {
var_dump(json_decode($json, true, $depth));
echo 'Last error: ', $json_errors[json_last_error()], PHP_EOL, PHP_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($json, false, 512, JSON_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

- json_encode() - Întoarce o reprezentare JSON pentru valoarea dată
- json_last_error() - Întoarce ultima eroare ce a survenit