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 = null [, 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 original » RFC 7159.

assoc

Când este true, obiectele JSON vor fi întoarse ca tablouri asociative; când este false, obiectele JSON vor fi întoarse ca obiecte. Când este null, obiectele JSON vor fi întoarse ca tablouri asociative sau obiecte în dependență dacă JSON_OBJECT_AS_ARRAY este setat în options.

depth

Limita adâncimii de imbricare specificată de utilizator.

options

Masca de biți a opțiunilor JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR. Efectele acestor constante sunt descrise pe pagina Constante JSON.

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.

Istoricul schimbărilor

Versiune Descriere
7.3.0 A fost adăugată valoarea JSON_THROW_ON_ERROR a parametrului options.
7.2.0 Parametrul assoc poate fi acum nul.
7.2.0 Au fost adăugate valorile JSON_INVALID_UTF8_IGNORE și JSON_INVALID_UTF8_SUBSTITUTE a parametrului options.
7.1.0 O cheie JSON vidă ("") poate fi codificată într-o proprietate vidă a obiectului în loc de a folosi o cheie cu valoarea _empty_.

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.

A se vedea și

add a note add a note

User Contributed Notes 4 notes

up
1
Alien426
3 years ago
Browsers don't choke on integers _starting_ with BigInt (64 bits), but before that (53 bits). The introduction of BigInt to modern browsers doesn't help much, when JSON handling functions do not support it. So I am trying to remedy that. My approach is to handle the decoded array before re-encoding it to a string:
<?php
function fix_large_int(&$value)
{
  if (
is_int($value) && $value > 9007199254740991)
   
$value = strval($value);
}
$json_str = '{"id":[1234567890123456789,12345678901234567890]}';
$json_arr = json_decode($json_str, flags: JSON_BIGINT_AS_STRING | JSON_OBJECT_AS_ARRAY);
echo(
json_encode($json_arr)); // {"id":[1234567890123456789,"12345678901234567890"]} (BigInt is already converted to a string here)
array_walk_recursive($json_arr, 'fix_large_int');
echo(
json_encode($json_arr)); // {"id":["1234567890123456789","12345678901234567890"]}
?>
up
0
greaties at ghvernuft dot nl
2 years ago
To load an object with data in json format:

function loadJSON($Obj, $json)
{
    $dcod = json_decode($json);
    $prop = get_object_vars ( $dcod );
    foreach($prop as $key => $lock)
    {
        if(property_exists ( $Obj ,  $key ))
        {
            if(is_object($dcod->$key))
            {
                loadJSON($Obj->$key, json_encode($dcod->$key));
            }
            else
            {
                $Obj->$key = $dcod->$key;
            }
        }
    }
}
up
0
cubefox at web dot NOSPAMPLEASE dot de
3 years ago
Warning: As the section "return values" mentions, the return value NULL is ambiguos. To repeat, it can mean three things:

* The input string had the value "null"
* There was an error while parsing the input data
* The encoded data was deeper than the recursion limit

To distinguish these cases, json_last_error() can be used.
up
-7
mattia
3 years ago
if you're using ajax to post, and your JavaScript code looks like this:

<code>
    var xhttp = new XMLHttpRequest();
    xhttp.open("POST", "something.php", true);
    xhttp.setRequestHeader("Content-Type", "application/json");
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
             // do something
        }
    };
    var data = {some: "thing"};
    xhttp.send(JSON.stringify(data));
</code>

then in <code>something.php</code> you can retrieve your json by doing

<?php
$data
= json_decode(file_get_contents("php://input"), true);
?>
To Top