(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_decode — Bir JSON dizgesini çözümler
$json
, bool|null $ilişkisel
= null
, int $derinlik
= 512
, int $seçenekler
= 0
) : mixedKodlanmış bir JSON dizgesini çözümler ve PHP değişkenine çevirir.
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.
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: | 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.
|
Ö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($json, true));
?>
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(
1 => array(
'English' => array(
'One',
'January'
),
'French' => array(
'Une',
'Janvier'
)
)
)
);
// Farklı derinlikteki hataları göster
var_dump(json_decode($json, true, 4));
echo 'Son hata: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
var_dump(json_decode($json, true, 3));
echo 'Son hata: ', json_last_error_msg(), PHP_EOL, PHP_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($json, false, 512, JSON_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" }
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.