PHP çeşitli nesneler ile bir JSON dize şifresini nasıl?

2 Cevap php

Ben bu örnekte sizin yardımı ile bir nesne ile bir JSON dize çözmek için biliyorum http://stackoverflow.com/questions/2543389/how-to-decode-a-json-string

Ama şimdi çok sayıda nesne ile çözme json dize geliştirmek için ve ben bunu nasıl anlayamıyorum istiyorum.

İşte bir örnek:

{ "inbox": [
  { "firstName": "Brett", "lastName":"McLaughlin" },
  { "firstName": "Jason", "lastName":"Hunter" },
  { "firstName": "Elliotte", "lastName":"Harold" }
 ],
"sent": [
  { "firstName": "Isaac", "lastName": "Asimov" },
  { "firstName": "Tad", "lastName": "Williams" },
  { "firstName": "Frank", "lastName": "Peretti" }
 ],
"draft": [
  { "firstName": "Eric", "lastName": "Clapton" },
  { "firstName": "Sergei", "lastName": "Rachmaninoff" }
 ]
}
  1. How to make just one foreach() to decode above JSON string?
  2. How to detect object's names: inbox, sent or draft on this foreach()?

2 Cevap

New answer

Revize soru Re: foreach aslında özellikleri yanı sıra çok değerli öğeler (diziler), ile çalışır details here. Senin soru JSON dize ile, Yani örneğin:

$data = json_decode($json);
foreach ($data as $name => $value) {
    // This will loop three times:
    //     $name = inbox
    //     $name = sent
    //     $name = draft
    // ...with $value as the value of that property
}

Özellikleri üzerinde ana döngü içinde, dizi girdileri üzerinde her özellik noktaları gitmek için bir iç döngü kullanabilirsiniz. Yani örneğin, eğer know üst düzey özelliklerin her biri bir dizi değeri vardır ve her dizi girişin "ad" özelliği, bu kodu vardır o:

$data = json_decode($json);
foreach ($data as $name => $value) {
    echo $name . ':'
    foreach ($value as $entry) {
        echo '  ' . $entry->firstName;
    }
}

... Gösterecektir:

inbox:
  Brett
  Jason
  Elliotte
sent:
  Issac
  Tad
  Frank
draft:
  Eric
  Sergei

Old answer(s)

Begin edit Re your comment:

Şimdi birkaç nesneler ile json dize çözmek için bilmek istiyorum!

Örnek does birkaç nesne var, onlar sadece tüm bir sarıcı nesnenin içinde bulunan konum yayınlanmıştır. Bu JSON bir gerekliliktir; (örneğin) bu yapamaz:

{"name": "I'm the first object"},
{"name": "I'm the second object"}

Bu JSON geçerli değil. Orada has tek bir üst düzey nesnesi olacak. Bu sadece bir dizi içerebilir:

{"objects": [
    {"name": "I'm the first object"},
    {"name": "I'm the second object"}
]}

... Ya tabii ki isimleri nesneleri birey verebilir:

{
    "obj0": {"name": "I'm the first object"},
    "obj1": {"name": "I'm the second object"}
}

End edit

Sizin örnek üç özelliklerini içeren bir nesne, her biri değeri nesnelerinin bir dizidir. Aslında, (aynı zamanda dizinin değerlere sahip özellikleri olan bir nesne vardır) Eğer bağlı söz konusu örnekte çok farklı değil.

Yani:

$data = json_decode($json);
foreach ($data->programmers as $programmer) {
    // ...use $programmer for something...
}
foreach ($data->authors as $author) {
    // ...use $author for something...
}
foreach ($data->musicians as $musician) {
    // ...use $musician for something...
}

Sen json dize çözmek için json_decode işlevini kullanabilirsiniz:

$json = <<<JSON
{ "programmers": [
  { "firstName": "Brett", "lastName":"McLaughlin" },
  { "firstName": "Jason", "lastName":"Hunter" },
  { "firstName": "Elliotte", "lastName":"Harold" }
 ],
"authors": [
  { "firstName": "Isaac", "lastName": "Asimov" },
  { "firstName": "Tad", "lastName": "Williams" },
  { "firstName": "Frank", "lastName": "Peretti" }
 ],
"musicians": [
  { "firstName": "Eric", "lastName": "Clapton" },
  { "firstName": "Sergei", "lastName": "Rachmaninoff" }
 ]
}
JSON;

$data = json_decode($json);


Then, to see what the data looks like, you can dump it :

var_dump($data);


And you'll see you have an object containing three arrays, each one containing other sub-objects :

object(stdClass)[1]
  public 'programmers' => 
    array
      0 => 
        object(stdClass)[2]
          public 'firstName' => string 'Brett' (length=5)
          public 'lastName' => string 'McLaughlin' (length=10)
      1 => 
        object(stdClass)[3]
          public 'firstName' => string 'Jason' (length=5)
          public 'lastName' => string 'Hunter' (length=6)
      ...
  public 'authors' => 
    array
      0 => 
        object(stdClass)[5]
          public 'firstName' => string 'Isaac' (length=5)
          public 'lastName' => string 'Asimov' (length=6)
      ...

Hangi veri erişim için biliyorum demektir.


For example, to display the list of the programmers, you could use :

foreach ($data->programmers as $programmer) {
  echo $programmer->firstName . ' ' . $programmer->lastName . '<br />';
}


Which would get you the following output :

Brett McLaughlin
Jason Hunter
Elliotte Harold