2017-03-28 10 views
0

私は最後の24時間頭を叩いてしまいました。テストと読んだら、これを理解することはできません。私は解析する必要があるJSONファイルを持っています。何らかの理由で、「配列」または「非オブジェクトのプロパティを取得しようとしています」または「無効な引数がforeach )」。ここでは、私が反復しようとしている完全なJSONです。各プロジェクトの名前、各プロジェクトの「データセット」、各「データセット」の「アクセス許可」を印刷する必要があります。このJSONを自分で作成していますので、必要に応じて書式を変更できます。PHPを使ったJSONの解析とエコー

$data = json_decode($json, true); 

出力JSON以下:

[ 
    [ 
     { 
     "projects":[ 
      { 
       "project":"test-project-1", 
       "datasets":[ 
        { 
        "dataset":"testing1", 
        "permissions":[ 
         { 
          "role":"READER", 
          "google_group":"[email protected]" 
         } 
        ] 
        }, 
        { 
        "dataset":"testing2", 
        "permissions":[ 
         { 
          "role":"OWNER", 
          "google_group":"[email protected]" 
         } 
        ] 
        }, 
        { 
        "dataset":"testing3", 
        "permissions":[ 
         { 
          "role":"READER", 
          "google_group":"[email protected]" 
         } 
        ] 
        }, 
        { 
        "dataset":"testing4", 
        "permissions":[ 
         { 
          "role":"WRITER", 
          "google_group":"[email protected]" 
         } 
        ] 
        } 
       ] 
      }, 
      { 
       "project":"test-project-2", 
       "datasets":[ 
        { 
        "dataset":"testing1", 
        "permissions":[ 
         { 
          "role":"READER", 
          "google_group":"[email protected]" 
         } 
        ] 
        }, 
        { 
        "dataset":"testing2", 
        "permissions":[ 
         { 
          "role":"READER", 
          "google_group":"[email protected]" 
         } 
        ] 
        }, 
        { 
        "dataset":"testing3", 
        "permissions":[ 
         { 
          "role":"READER", 
          "google_group":"[email protected]" 
         } 
        ] 
        }, 
        { 
        "dataset":"testing4", 
        "permissions":[ 
         { 
          "role":"READER", 
          "google_group":"[email protected]" 
         } 
        ] 
        } 
       ] 
      } 
     ] 
     } 
    ] 
] 

私はのようなものを試してみました:

foreach($data->projects as $output) 
{ 
    echo $output->project . "\n"; 
    foreach($output->datasets as $datasets) 
    { 
     echo $output->dataset . "\n"; 
    } 
} 

は助けてくれてありがとう!

EDIT:ワーキングコードの上にJSONをパース:

$projects = $json['projects']; 
foreach ($projects as $project) { 
    echo $project['project'] . "<br>"; 
    foreach ($json['projects'][0]['datasets'] as $datasets){ 
     echo $datasets['dataset'] . "<br>"; 
     foreach ($json['projects'][0]['datasets'][0]['permissions'] as $permissions){ 
      echo $permissions['role'] . "<br>"; 
      echo $permissions['google_group'] . "<br>"; 
     } 
    } 
} 
+2

'のvar_dump($出力 - >データセット);' – mkaatman

答えて

2

あなたのJSONオブジェクトを含む2つのネストされた配列を、含まれている、あなたがしたいです。まず、[0][0]のようなものを使用して、プロジェクトを含む連想配列を取得します。

// ... 
$projects = $json['projects']; 
foreach ($projects as $project) { 
    echo "Project: " . $project['project'] . "\n"; 
    foreach ($project['datasets'] as $dataset) { 
     echo "Dataset: " . $dataset['dataset']; 
     foreach ($dataset['permissions'][0] as $key => $value) { 
      // ... 
     } 
    } 
} 
+0

[OK]をフィリップは、私は$プロジェクト= $ JSON '、どこかに取得しています[0] [0] [ 'プロジェクト'];' '動作しませんでしたが$ projects = $ json ['projects']; foreach($ projects as $ project){ echo $ project ['project']; } 'は2つのプロジェクト名を正常に印刷しました。どのようにデータセット名とそのアクセス許可を印刷するのですか? – user3282173

+0

@ user3282173あなたは '[0] [0]'の部分が必要ないなら、投稿に間違ったjsonを投稿したようです。しかし、 - 私は私の答えを読み取り、アクセス許可とデータセットを – Philipp

+0

ありがとうフィリップ、あなたは正しい方向に私を導いた。私は今更新されたコードを掲載して、期待通りに動作し、印刷します。速やかなご返信ありがとうございます! – user3282173