(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
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ă 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ă)
Î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.
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.
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ă. |