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ğerine çevirir.

Bağımsız Değişkenler

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 bağımsız değişkeninde 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. Değer 0'dan büyük, 2147483647'den küçük veya buna eşit olmalıdır.

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 PHP için uygun veri türlerinde döner. true, false ve null değerle sırasıyla true, false ve null olarak döner. json çözülemediğinde ya da şifreli verinin iç içelik derinliği belirtilenden fazla olduğunda da null döner.

Hatalar/İstisnalar

derinlik izin verilen aralığın dışındaysa, PHP 8.0.0 ve sonrasında bir ValueError yavrulanır. Evvelce, E_WARNING seviyesinde bir hata çıktılanırdı.

Sürüm Bilgisi

Sürüm: Açıklama
7.3.0JSON_THROW_ON_ERROR seçeneği eklendi.
7.2.0associative is nullable now.
7.2.0JSON_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($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" }

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

To Top