2017-03-13 16 views
0

私はこれに対する解決策として高く評価されていますが、これまでのところ私が取り組んでいるものは何も見つかりませんでした。私は、特定のフィールドを抽出することが困難な方法で入れ子になっているJSON応答を解析するためにPHPを使用しています。ここでPHPで入れ子になったJSONをパースする

は、JSONのビットは次のとおりです。ここで

{ 
    "collection":{ 
    "items":[ 
     { 
      "href":"https://api.teamsnap.com/v3/members/MEMBERID", 
      "data":[ 
       "name":"id", 
       "value": 0000000 // MEMBERID 
      }, 
      { 
       "name":"type", 
       "value":"member" 
      }, 
      { 
       "name":"address_city", 
       "value":"" 
      }, 
      { 
       "name":"address_state", 
       "value":"" 
      }, 

は私のPHPです:

$json = file_get_contents($url, false, $context); 

$result = json_decode($json); 
foreach ($result->collection->items as $items=>$val) { 
    foreach ($val->data as $data=>$datasets) { 
     foreach ($datasets as $dataset=>$val) { 
      echo $dataset.': '.$val; 
      echo "<br>"; 
     } 
    } 
}; 

、これは電流出力のビットです:

name: id 
value: MEMBERID 
name: first_name 
value: MEMBERNAME 
name: last_name 
value: MEMBERNAME 

何Iこのレスポンスに含まれるすべてのメンバーを姓名でリストすることができます。私は$ val-> first_name、$ val ['first_name'];を使って試しました。そのようなすべてがforeachエラーになります。

+0

投稿したJSON構造が無効です。 MEMBERID値の下で中括弧で囲まれた四角い中括弧で開かれた配列を閉じることはできません。 – arkascha

+0

これは単なるサンプルであり、セキュリティを保護するために実際のメンバーIDを変更しました。私は上記のコードでjsonを更新しました – RiotAct

+0

確かにそれは単なる例です。しかしそれでも無効です。データの構造が無効であるため、コードを修正する手助けができないため、不明です。 – arkascha

答えて

2

あなたはすべてのdataメンバーは、あなたがこのようなものを使用してforループをスキップすることができnamevalueフィールドがあることを確認できた場合:

$json = file_get_contents($url, false, $context); 

$result = json_decode($json); 
foreach ($result->collection->items as $itemKey => $val) { 
    $data = array(); 
    foreach ($val->data as $dataKey => $dataset) { 
     $data[$dataset->name] = $dataset->value; 
    } 
    var_dump($data); 
}; 

あなたはおそらくオーバーループする前$result->collection$result->collection->items最初に確認すべきであるが、彼らはエラーを避けるために。

+0

その結果、次のエラーが発生しました:配列としてスカラー値を使用できません – RiotAct

+0

変数名を確認して、foreachループのキーを '$ data'から' $ dataKey'にリネームしました。そこの配列を上書きします。 – ccKep

+0

これで、文字列全体の配列出力が得られました。 first_nameのような単一の変数にはどうすればアクセスできますか? – RiotAct

関連する問題