0

JSON はまったく初めてで、php を使用してリモート JSON をフィルタリング/ソートし、フォーマットされた結果を CMS に埋め込む作業を担当しています。

データ構造は次のようになります。

"Categories":[
  {
     "Name":"Americas",
     "ID":"12345",
     "Countries":[
        {
           "Name":"Argentina",
           "Partners":[
              {
                 "Country":"Argentina",
                 "ID":"4321",
                 "LogoUrl":"logo1.jpg",
                 "Title":"Company A",
                 "AddressBlock":"123 Main Street",
                 "Phone":"444-555-1212",
                 "TollFree":"",
                 "Email":"info@CompanyA.com",
                 "Url":"http://www.CompanyA.com/",
                 "IsVisible":true,
                 "IsDistributor":false
              }
           ]
        },
        {
           "Name":"Brazil",
           "Partners":[
              {
                 "Country":"Brazil",
                 "ID":"5432",
                 "LogoUrl":"logo2.jpg",
                 "Title":"Company B",
                 "AddressBlock":"54 Center Street",
                 "Phone":"234-567-3600",
                 "TollFree":"",
                 "Email":"info@CompanyB.com",
                 "Url":"http://www.CompanyB.com",
                 "IsVisible":true,
                 "IsDistributor":false
              },

    "Name":"Canada",
           "Partners":[
              {
                 "Country":"Canada",
                 "ID":"Company C",
                 "LogoUrl":"logo3.Company C",
                 "AddressBlock":"1 Mll Road Floor 27\r\nCanton, ON",
                 "Phone":"555-66-7777",
                 "TollFree":"",
                 "Email":"info@CompanyC.com",
                 "Url":"http://www.CompanyC.com",
                 "IsVisible":true,
                 "IsDistributor":false
              },

           ]
        }
     ]
  }

]

理想的には、キーと値のペアを配列に格納し、アルファベット順に並べ替えたリストとして出力したいと考えています。国ごとに複数のエントリを持つことができ、「IsVisible:false」に設定されたエントリは非表示にする必要があります。

私はここでいくつかの検索を行い、データソースに到達できましたが、配列は '展開' されておらず、php によってその次元をループ処理されておらず、これが返されます:

Categories:Array 

このコードを使用して:

 $string = file_get_contents("https://myURL.securekey");
foreach ($json_a as $key => $value)
 {
   foreach($value as $v)
   {
       echo $v."  ";
   }
 }

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

0

編集:以下を使用して:

 $string =  file_get_contents('https://secure.json');
 $json = json_decode($string, true);
 foreach($json as $fieldIndex => $fields) { 
    foreach($fields as $valueIndex => $envelope) {
        foreach($envelope as $valueEntry) {
            foreach($valueEntry as $key => $value) {
                if ($key == "Name") {
                echo $value;
                }
                printf("%d - %d - %s: '%s'\n", $key, $value);
                $build[$valueIndex][$key]=$value;               
            }
        }
    }
}
var_dump($build);

次の出力が得られます。

0 - 0 - 0: '配列' 0 - 0 - 1: '配列' 0 - 0 - 2: '配列' 0 - 0 - 3: '配列' 0 - 0 - 4: '配列' 0 - 0 - 5 : '配列' 配列(1) { [0]=> 配列(6) { [0]=> 配列(2) { ["名前"]=> 文字列(9) "アルゼンチン" ["パートナー"]=> array(1) { [0]=> array(11) { ["国"]=> string(9) "アルゼンチン" ["ID"]=> string(36) "4d93" ["LogoUrl"]=> string(52) " http://www.aaa.com/images/partners/aaa.jpg " ["Title"]=> string(14) "Company SA" ["AddressBlock"]=> string(118) " Main Street - Dock 8 12435- Anytown USA" ["Phone"]=> string(17) "(444) 123-4567" ["TollFree"]=> string(0) "" ["Email"]=>string(28) "info@aaa.com" ["Url"]=> string(35) " http://www.aaaa.com/ " ["IsVisible"]=> bool(true) ["IsDistributor"] => bool(偽) } } }

ただし、特定の名前/値を参照して必要な場所にエコーする方法についてはまだ不明です。おそらく次のようなものだと思います:

if ($key == "Title") {
  echo "Title: " . $key . "<br />";
}  esleif ($key == "Country") {
  echo $value;
 }

しかし、a)ループ内のどこに配置して、実際に適切なレベルで値を取得するか、およびb)構文(エコーアウトではなく最後にvar_dumpがあるものしか表示できないため、オフにする必要があります)にこだわっていますループ内の値。

于 2013-06-18T20:25:15.723 に答える