(PHP 5 >= 5.2.0, PECL json >= 1.2.0, PHP 7)
json_decode — Convertește într-o variabilă un șir reprezentat JSON
$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.
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ă)
Î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.
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" }
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.
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ă. |