PHP 8.1.0 Released!

json_decode

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

json_decodeBir JSON dizgesini çözümler

Açıklama

json_decode(
    string $json,
    ?bool $ilişkisel = null,
    int $derinlik = 512,
    int $seçenekler = 0
): mixed

Kodlanmış bir JSON dizgesini çözümler ve PHP değişkenine çevirir.

Değiştirgeler

json

Deşifre edilmiş json dizgesi.

Bu işlev UTF-8 kodlu dizgelerle çalışır.

Bilginize:

PHP, özgün » RFC 7159'da belirtildiği gibi JSON'ın kapsayıcı kümesini gerçekler.

ilişkisel

true olduğu zaman JSON nesneleri bir ilişkisel dizilere dönüştürülür. false belirtilirse JSON nesneleri nesne olarak döndürülür. null olduğu zaman JSON nesneleri seçenekler değiştirgesinde JSON_OBJECT_AS_ARRAY sabiti atanmışsa ilişkisel dizi atanmamışsa nesne olarak döner.

derinlik

Kodlu yapının azami iç içe derinliği.

seçenekler

JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR sabitlerinin bit maskesi. Bu sabitlerin davranışı JSON sabitleri sayfasında açıklanmıştır.

Dönen Değerler

json ile şifrelenmiş değerler geriye PHP ye uygun veri türü olarak dönerler. Veriler doğru, yanlış ve boş şekilde sırasıyla true, false ve null olarak dönerler. Dönen değer null ise json çözülememiştir ya da şifreli verinin iç içelik derinliği belirtilenden fazladır.

Sürüm Bilgisi

Sürüm: Açıklama
7.3.0 JSON_THROW_ON_ERROR seçeneği eklendi.
7.2.0 associative is nullable now.
7.2.0 JSON_INVALID_UTF8_IGNORE ve JSON_INVALID_UTF8_SUBSTITUTE seçeneği eklendi.
7.1.0 _empty_ değerli bir anahtar kullanmak yerine boş nesne özelliğine boş bir JSON anahtarı ("") kodlanabilir.

Örnekler

Örnek 1 - json_decode() örnekleri

<?php
$json 
'{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($jsontrue));

?>

Yukarıdaki örneğin çıktısı:

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)
}

Örnek 2 - Geçersiz nesne özelliklerine erişim

PHP'nin adlandırma kuralı (örneğin, kısa çizgi) kapsamında izin verilmeyen karakterleri içeren bir nesne içindeki öğelere erişim, öğe adının kaşlı ayraçlar ve tek tırnak imleri arasına alınmasıyla gerçekleştirilebilir.

<?php

$json 
'{"foo-bar": 12345}';

$obj json_decode($json);
print 
$obj->{'foo-bar'}; // 12345

?>

Örnek 3 - json_decode() kullanırken yapılan genel bir hata.

<?php

// Aşağıdaki dizgeler JavaScript de geçerli olmasına karşın JSON da geçerli değildir.

// isim ve değerler çift tırnak içine alınmalıdır.
// tek tırnak geçerli değildir.
$bad_json "{ 'bar': 'baz' }";
json_decode($bad_json); // boş

// isim çift tırnak içine alınmalıdır.
$bad_json '{ bar: "baz" }';
json_decode($bad_json); // boş

// sonda kalan virgüle izin verilmez
$bad_json '{ bar: "baz", }';
json_decode($bad_json); // boş

?>

Örnek 4 - depth hataları

<?php
// Veriyi azami derinlik olarak 4 iç içelik ile kodla
// (array -> array -> array -> string).
$json json_encode(
    array(
        
=> array(
            
'English' => array(
                
'One',
                
'January'
            
),
            
'French' => array(
                
'Une',
                
'Janvier'
            
)
        )
    )
);

// Farklı derinlikteki hataları göster
var_dump(json_decode($jsontrue4));
echo 
'Son hata: 'json_last_error_msg(), PHP_EOLPHP_EOL;

var_dump(json_decode($jsontrue3));
echo 
'Son hata: 'json_last_error_msg(), PHP_EOLPHP_EOL;
?>

Yukarıdaki örneğin çıktısı:

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"
    }
  }
}
Son hata: No error

NULL
Son hata: Maximum stack depth exceeded

Örnek 5 - Büyük tamsayılarla json_decode()

<?php
$json 
'{"number": 12345678901234567890}';

var_dump(json_decode($json));
var_dump(json_decode($jsonfalse512JSON_BIGINT_AS_STRING));

?>

Yukarıdaki örneğin çıktısı:

object(stdClass)#1 (1) {
  ["number"]=>
  float(1.2345678901235E+19)
}
object(stdClass)#1 (1) {
  ["number"]=>
  string(20) "12345678901234567890"
}

Notlar

Bilginize:

JSON sınıfı JavaScript değildir, ancak JavaScript'in alt kümesidir.

Bilginize:

Bir hatayı çözmek ve hatanın tam niteliği belirlemek için json_last_error() kullanılabilir.

Ayrıca Bakınız

add a note add a note

User Contributed Notes 6 notes

up
5
Alien426
7 months 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
3
cubefox at web dot NOSPAMPLEASE dot de
1 year 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
1
as-works at narod dot ru
23 days ago
On some PHP7+ systems php_json functions can be undefined (i faced it on Oracle Linux Enterprice with php 7.4 installed from REMI repository). If you have the same problem, try to install separated php-json module:

# yum install php-json

Hope this helps.
up
-3
Anonymous
2 months ago
<?php

$array
= [0 => "foo", 1 => "bar", 2 => ["baz"]];

$associative = false;

var_dump(
   
json_decode(
       
json_encode($array),
       
$associative
   
)
);

?>

The above will output
<?php
/*
array (size=3)
  0 => string 'foo' (length=3)
  1 => string 'bar' (length=3)
  2 =>
    array (size=1)
      0 => string 'baz' (length=3)
*/
?>

Considering <?php $associative = false; ?> one might expect
<?php
/*
object(stdClass)
  public '0' => string 'foo' (length=3)
  public '1' => string 'bar' (length=3)
  public '2' =>
    object(stdClass)
      public '0' => string 'baz' (length=3)
*/
?>

an stdClass object instead of an array, but this is incorrect.
json_decode will always return an array for a sequentially encoded array, regardless of the ?bool $associative 2nd argument

Which is inline with the above mentioned docs/spec
    > Returns the value encoded in json in appropriate PHP type

Considering that the 1st arg was a sequentially encoded array as a json string
    '["foo","bar",["baz"]]'
up
-4
greaties at ghvernuft dot nl
7 months 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
-21
mattia
9 months 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