diziye json_decode


422

Bir dizi içine bir JSON dizesi kodunu çözmeye çalışıyorum ama aşağıdaki hatayı alıyorum.

Önemli hata: 6. satırda C: \ wamp \ www \ temp \ asklaila.php dosyasında stdClass türündeki nesne dizi olarak kullanılamaz

İşte kod:

<?php
$json_string = 'http://www.domain.com/jsondata.json';

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj['Result']);
?>

1
Onunla erişirseniz işe $ob->Resultyarardı.
lapin

Yanıtlar:


839

Gereğince belgeleri , bunun yerine bir nesnenin ilişkisel dizi isterseniz belirtmeniz gerekir json_decodebu kod olurdu:

json_decode($jsondata, true);

4
Bir soru değil, bir nesne olarak değil, bir dizi olarak geri dönmesinin avantajları nelerdir?
Foxinni

52
Soruyu gündeme getiriyor. "Bir soru için dilenmek", kanıtlanması gereken bir şeyi varsaymak anlamına gelir ( ref ). Her iki durumda da, avantaj, OP'nin nesnelerden daha rahat geçiş dizileri olması veya zaten uygulanmış olan başka bir kodun bir dizi gerektirmesi olabilir.
jamesnotjim

8
@jamesnotjim Bir nesneyi döndüren varsayılan uygulama, nesnelerin dizilerden daha iyi dönüş değerleri olduğu sorusuna neden olabilir, değil mi?
David Mann

7
Gerçekten de @ DavidMann olabilir. Touché!
jamesnotjim

8
Ben (yıllar sonra da) JSON bir şey ama veri karıştırıcı bir "varsayılan" seçim yapma veri içeren bir olasılık olduğunu yorum eklemek istiyorum.
Barry

45

bunu dene

$json_string = 'http://www.domain.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
echo "<pre>";
print_r($obj);

27

Bu geç bir katkıdır, ancak döküm için geçerli bir durum json_decodevardır (array).
Aşağıdakileri göz önünde bulundur:

$jsondata = '';
$arr = json_decode($jsondata, true);
foreach ($arr as $k=>$v){
    echo $v; // etc.
}

Eğer $jsondataşimdiye (deneyimlerime genellikle olduğu gibi) boş bir dizge olarak döndürülür, json_decodedönecektir NULLhata ile sonuçlanır Uyarı: foreach için verilen Geçersiz argüman () 3. hatta . İf / then kodu veya üçlü bir operatör satırı ekleyebilirsiniz, ancak IMO, satır 2'yi basitçe ...

$arr = (array) json_decode($jsondata,true);

... json_decodeaynı anda milyonlarca büyük dizi belirtmediğiniz sürece, @ TCB13'ün işaret ettiği gibi, performans olumsuz etkilenebilir.



6

PHP Dokümantasyon json_decode fonksiyonuna göre , döndürülen nesneleri ilişkilendirilebilir dizilere dönüştüren assoc adlı bir parametreye sahiptir.

 mixed json_decode ( string $json [, bool $assoc = FALSE ] )

Yana doç parametresidir FALSEvarsayılan olarak, sen bu değeri ayarlamak zorunda TRUEdizisi almak amacıyla.

Örnek bir örnek için aşağıdaki kodu inceleyin:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));

hangi çıktılar:

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

5

Bu, onu bir dizi olarak da değiştirir:

<?php
    print_r((array) json_decode($object));
?>

6
Önerildiği gibi CPU / Bellek Bu israf yapar tam olarak aynı, içten çok daha hızlı. json_decode($object, true);true
TCB13

1
@ TCB13, her ikisine de ihtiyacınız varsa ve kod çözmeyi tekrar çalıştırmak istemiyorsanız hariç
Jimmy Kane

3
@JimmyKane ile anlaşın. Denedim ve her iki sürümü bir döngüde çalıştırın; hem nesneye hem de diziye ihtiyacınız varsa (bu nadiren olsa da?), json_decode+ döküm her iki lezzeti de çalıştırmaktan% 45 daha hızlıdır json_decode. Öte yandan, her ikisi de o kadar hızlı ki, kelimenin tam anlamıyla binlerce şifre çözme işlemine ihtiyacınız yoksa , fark göz ardı edilebilir.
LSerni

4

json_decodeikinci argümanı destekleyin, buna ayarlandığında bunun yerine TRUEbir döndürür . Desteklenen tüm bağımsız değişkenleri ve ayrıntılarını görmek için Manuel işlev sayfasını kontrol edin .ArraystdClass Objectjson_decode

Örneğin şunu deneyin:

$json_string = 'http://www.example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, TRUE); // Set second argument as TRUE
print_r($obj['Result']); // Now this will works!

3
json_decode($data, true); // Returns data in array format 

json_decode($data); // Returns collections 

Yani, bir dizi istiyorsanız ikinci argüman json_decodeişlevinde 'true' olarak geçebilirsiniz .


3

umarım bu sana yardımcı olmuştur

$json_ps = '{"courseList":[  
            {"course":"1", "course_data1":"Computer Systems(Networks)"},  
            {"course":"2", "course_data2":"Audio and Music Technology"},  
            {"course":"3", "course_data3":"MBA Digital Marketing"}  
        ]}';

Json kod çözme işlevini kullan

$json_pss = json_decode($json_ps, true);

Php JSON dizisi üzerinde döngü

foreach($json_pss['courseList'] as $pss_json)
{

    echo '<br>' .$course_data1 = $pss_json['course_data1']; exit; 

}

Sonuç : Bilgisayar Sistemleri (Ağlar)


2

PHP json_decode json verileri PHP ile ilişkili diziye
Ex için dönüştürmek :$php-array= json_decode($json-data, true); print_r($php-array);


2

Lütfen bunu dene

<?php
$json_string = 'http://www.domain.com/jsondata.json';

$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, true);
echo "<pre>"; print_r($obj['Result']);
?>

2

Şunu deneyin:

$json_string = 'https://example.com/jsondata.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata);
print_r($obj->Result);
foreach($obj->Result as $value){
  echo $value->id; //change accordingly
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.