在PHP中使用foreach循环解析Json

时间:2018-06-25 16:23:18

标签: php json parsing

我正在使用iTunes RSS生成器来获取HOT曲目,现在我正在使用以下方式来解析JSON:

<?php
$json_string = 'https://rss.itunes.apple.com/api/v1/in/apple-music/hot-tracks/all/10/explicit.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
$cltn = $obj['feed']['results'][0]['collectionName'];
echo $cltn;
?>

现在,我们知道它将仅返回1个collectionName。 JSON请求返回10个结果。如何使用foreach循环将它们全部获取?我使用了几种方法,但没有成功。

4 个答案:

答案 0 :(得分:1)

由于您未提供数组的输出,因此我假设[0]索引是需要迭代的内容。

您需要通过执行以下操作来遍历login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String email = ed1.getText().toString().trim(); String password = ed2.getText().toString().trim(); final String log_id = u_id.getText().toString(); if(email.isEmpty()){ ed1.setError("Fill this field"); ed1.requestFocus(); }else if(password.isEmpty()){ ed2.setError("Fill this field"); ed2.requestFocus(); } else if(log_id.isEmpty()){ u_id.setError("Fill this field"); u_id.requestFocus(); } else { login(); Intent i = new Intent(MainActivity.this,fullview.class); Bundle b =new Bundle(); b.putString("text", u_id.getText().toString().trim()); i.putExtras(b); startActivity(i); } }

$obj['feed']['results']

答案 1 :(得分:0)

尝试使用foreach()以这种方式key=>value迭代数组,因为您已经在php中将json解码为array而不是object

<?php
$json_string = 'https://rss.itunes.apple.com/api/v1/in/apple-music/hot-tracks/all/10/explicit.json';
$jsondata = file_get_contents($json_string);
$array = json_decode($jsondata,true);
# printing resulted array just for debugging purpose
print '<pre>';
print_r($array);
print '</pre>';
foreach($array['feed']['results'] as $key=>$value){
    echo $value['collectionName'].'<br/>';
}
?>

答案 2 :(得分:0)

查询结果:

foreach ($obj['feed']['results'] as $result) {
    echo $result['collectionName'] . '<br>' . PHP_EOL;
}

答案 3 :(得分:0)

根据您提供的代码,您可以迭代结果以从艺术家/曲目列表中获取所有可能的信息,例如:

$json_string = 'https://rss.itunes.apple.com/api/v1/in/apple-music/hot-tracks/all/10/explicit.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
$cltn = $obj['feed']['results'];

function test_print($item, $key)
{
    echo "<strong>".$key."</strong>: ".$item."<br>";
}

foreach($cltn as $key => $c) {
    echo "Result No ".($key+1)."<br>";
    array_walk_recursive($c, 'test_print');
}

如果只想显示artistNamecollectionName,则可以略微修改上面的示例:

$json_string = 'https://rss.itunes.apple.com/api/v1/in/apple-music/hot-tracks/all/10/explicit.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata,true);
$cltn = $obj['feed']['results'];

foreach($cltn as $c) {
       echo $c['artistName'].": ".$c['collectionName']."<br>";
}

您可以在PHP Fiddle

中尝试上述所有操作