这是我的问题!我有一个巨大的json文件,我想解析(这里是链接:http://pastebin.com/JwPDufMx) 我想提取它所有的歌曲以填充不同的数组,如ID / TITLE / GENRE / ARTWORK_URL
我试过这一行
$json_file = file_get_contents('playlist.json');
$jfo = json_decode($json_file);
for ... { //don't know how to make this loop to end well despite infinite
$id[$i] = $jfo->tracks->track->id
...
}
但它不起作用。 我想知道如何使其正确并提取我需要的数据:D
提前感谢您的帮助!
答案 0 :(得分:1)
您的测试数据显示有多个播放列表。下面的代码通过平衡开始和结束括号一次提取一个播放列表。然后在每个播放列表json上使用json_decode。
$json = file_get_contents('playlist.json');
$depth = 0;
$playlist_json = '';
$tracks = array();
for ($i = 0; $i < strlen($json); $i++) {
$char = $json[$i];
if ($char == '{') {
$depth++;
} elseif ($char == '}') {
$depth--;
}
if ($char == '{' || strlen($playlist_json) > 0) {
$playlist_json .= $char;
}
if ($depth == 0 && strlen($playlist_json) > 0) {
$playlist = json_decode($playlist_json, true);
$tracks = array_merge($tracks, $playlist['tracks']);
$playlist_json = '';
}
}
foreach ($tracks as $track) {
echo $track['id'] . "\n";
echo $track['title'] . "\n";
echo $track['genre'] . "\n";
echo $track['artwork_url'] . "\n\n";
}
在测试数据上使用它会产生:
155675361
Tegan and Sara - I Was A Fool (Bolivard Remix) *FREE DOWNLOAD IN DESCRIPTION*
Deep Pop
http://i1.sndcdn.com/artworks-000083195650-0wlzyr-large.jpg?e76cf77
156088370
Mariah Carey - Emotions (LBCK Rmx)
LBCK
http://i1.sndcdn.com/artworks-000083458530-wq93hc-large.jpg?e76cf77
156520409
Topi x Tontario - Backfeed
Chill
http://i1.sndcdn.com/artworks-000083734122-2i0zh1-large.jpg?e76cf77
157430720
SG Lewis - Silence (Art Of Shades Re-Work)
Sensitive
http://i1.sndcdn.com/artworks-000084379509-8dq1aa-large.jpg?e76cf77
156707981
Tender Games - Lost (BBC Radio 1 l Annie Mac - 29.06.2014)
Tender Games
http://i1.sndcdn.com/artworks-000083857078-f1axpw-large.jpg?e76cf77
158508920
Sailor & I - Tough Love (Phonothek Remix)
Deep-House
http://i1.sndcdn.com/artworks-000085049173-5w358k-large.jpg?e76cf77
158261593
Garde Le Pour Toi
http://i1.sndcdn.com/artworks-000084889721-lhpg98-large.jpg?e76cf77
158384606
Damian Marley - Road To Zion ( EFIX & XKAEM Cover )
deep
http://i1.sndcdn.com/artworks-000084969076-tk9e3x-large.jpg?e76cf77
159111023
Clara Moto - In My Dream (Ferdinand Remix)
Ferdinand
http://i1.sndcdn.com/artworks-000085458717-m1nhj1-large.jpg?e76cf77