PHP entnimmt JSON und gibt null zurück

WBOY
Freigeben: 2016-08-04 09:19:03
Original
1016 Leute haben es durchsucht

Der Code lautet wie folgt:

<code><?php
$url = 'http://music.163.com/api/song/detail/?id='.$_GET['id'].'&ids=%5B'.$_GET['id'].'%5D&csrf_token=';
$json = file_get_contents($url);
$obj = json_decode($json);
$array = array(
    "name" => $obj->songs[0]->bMusic->name,
    "artist" => $obj->songs[0]->artists[0]->name,
    "url" => $obj->songs[0]->mp3Url
);
echo json_encode($array);
?>
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Die JSON-Datei sieht ungefähr so ​​aus:

<code>{
    "songs": [
        {
            "starred": false,
            "popularity": 95,
            "starredNum": 0,
            "playedNum": 0,
            "dayPlays": 0,
            "hearTime": 0,
            "mp3Url": "http://m2.music.126.net/2b980AHtVx18bJ_Z9MhKXA==/2830142929914115.mp3",
            "rtUrls": [],
            "status": 1,
            "crbt": null,
            "bMusic": {
                "volumeDelta": 0.095421,
                "playTime": 200000,
                "bitrate": 96000,
                "dfsId": 2830142929914115,
                "sr": 44100,
                "name": "Set Fire To The Rain",
                "id": 24667967,
                "size": 2436177,
                "extension": "mp3"
            },
            "rtUrl": null,
            "position": 2,
            "duration": 200000,
            "alias": [],
            "hMusic": {
                "volumeDelta": -0.05,
                "playTime": 200000,
                "bitrate": 320000,
                "dfsId": 2830142929914113,
                "sr": 44100,
                "name": "Set Fire To The Rain",
                "id": 24667965,
                "size": 8056892,
                "extension": "mp3"
            },
            "mMusic": {
                "volumeDelta": 0.41,
                "playTime": 200000,
                "bitrate": 160000,
                "dfsId": 2830142929914114,
                "sr": 44100,
                "name": "Set Fire To The Rain",
                "id": 24667966,
                "size": 4042394,
                "extension": "mp3"
            },
            "lMusic": {
                "volumeDelta": 0.095421,
                "playTime": 200000,
                "bitrate": 96000,
                "dfsId": 2830142929914115,
                "sr": 44100,
                "name": "Set Fire To The Rain",
                "id": 24667967,
                "size": 2436177,
                "extension": "mp3"
            },
            "album": {
                "songs": [],
                "paid": false,
                "onSale": false,
                "status": 1,
                "tags": "",
                "blurPicUrl": "http://p4.music.126.net/J32cgj_Dq-4Wpfs4U9sjwA==/2539871860943087.jpg",
                "companyId": 0,
                "pic": 2539871860943087,
                "description": "",
                "subType": null,
                "alias": [],
                "picId": 2539871860943087,
                "briefDesc": "",
                "artist": {
                    "img1v1Id": 0,
                    "alias": [],
                    "picId": 0,
                    "briefDesc": "",
                    "picUrl": "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                    "albumSize": 0,
                    "img1v1Url": "http://p3.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                    "trans": "",
                    "musicSize": 0,
                    "name": "",
                    "id": 0
                },
                "picUrl": "http://p4.music.126.net/J32cgj_Dq-4Wpfs4U9sjwA==/2539871860943087.jpg",
                "commentThreadId": "R_AL_3_1983765",
                "artists": [
                    {
                        "img1v1Id": 0,
                        "alias": [],
                        "picId": 0,
                        "briefDesc": "",
                        "picUrl": "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                        "albumSize": 0,
                        "img1v1Url": "http://p3.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                        "trans": "",
                        "musicSize": 0,
                        "name": "Piano Tribute Players",
                        "id": 99094
                    }
                ],
                "copyrightId": 0,
                "publishTime": 1321804800000,
                "company": "CC Entertainment",
                "name": "Piano Tribute to Adele",
                "id": 1983765,
                "type": "专辑",
                "size": 14
            },
            "commentThreadId": "R_SO_4_21515271",
            "artists": [
                {
                    "img1v1Id": 0,
                    "alias": [],
                    "picId": 0,
                    "briefDesc": "",
                    "picUrl": "http://p3.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                    "albumSize": 0,
                    "img1v1Url": "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                    "trans": "",
                    "musicSize": 0,
                    "name": "Piano Tribute Players",
                    "id": 99094
                }
            ],
            "copyrightId": 0,
            "score": 95,
            "fee": 0,
            "mvid": 0,
            "ftype": 0,
            "rtype": 0,
            "rurl": null,
            "copyFrom": "",
            "audition": null,
            "ringtone": "",
            "disc": "",
            "no": 2,
            "name": "Set Fire To The Rain",
            "id": 21515271
        }
    ],
    "equalizers": {},
    "code": 200
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ausgabeergebnis auf Hostseite hochladen:

Hinweis: Es wird versucht, Eigentum von Nicht-Objekten in Zeile 6 einzubinden {"name":null,"artist":"Piano Tribute Players","url":null🎜>

Antwortinhalt:

Der Code lautet wie folgt:

<code><?php
$url = 'http://music.163.com/api/song/detail/?id='.$_GET['id'].'&ids=%5B'.$_GET['id'].'%5D&csrf_token=';
$json = file_get_contents($url);
$obj = json_decode($json);
$array = array(
    "name" => $obj->songs[0]->bMusic->name,
    "artist" => $obj->songs[0]->artists[0]->name,
    "url" => $obj->songs[0]->mp3Url
);
echo json_encode($array);
?>
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Die JSON-Datei sieht ungefähr so ​​aus:

<code>{
    "songs": [
        {
            "starred": false,
            "popularity": 95,
            "starredNum": 0,
            "playedNum": 0,
            "dayPlays": 0,
            "hearTime": 0,
            "mp3Url": "http://m2.music.126.net/2b980AHtVx18bJ_Z9MhKXA==/2830142929914115.mp3",
            "rtUrls": [],
            "status": 1,
            "crbt": null,
            "bMusic": {
                "volumeDelta": 0.095421,
                "playTime": 200000,
                "bitrate": 96000,
                "dfsId": 2830142929914115,
                "sr": 44100,
                "name": "Set Fire To The Rain",
                "id": 24667967,
                "size": 2436177,
                "extension": "mp3"
            },
            "rtUrl": null,
            "position": 2,
            "duration": 200000,
            "alias": [],
            "hMusic": {
                "volumeDelta": -0.05,
                "playTime": 200000,
                "bitrate": 320000,
                "dfsId": 2830142929914113,
                "sr": 44100,
                "name": "Set Fire To The Rain",
                "id": 24667965,
                "size": 8056892,
                "extension": "mp3"
            },
            "mMusic": {
                "volumeDelta": 0.41,
                "playTime": 200000,
                "bitrate": 160000,
                "dfsId": 2830142929914114,
                "sr": 44100,
                "name": "Set Fire To The Rain",
                "id": 24667966,
                "size": 4042394,
                "extension": "mp3"
            },
            "lMusic": {
                "volumeDelta": 0.095421,
                "playTime": 200000,
                "bitrate": 96000,
                "dfsId": 2830142929914115,
                "sr": 44100,
                "name": "Set Fire To The Rain",
                "id": 24667967,
                "size": 2436177,
                "extension": "mp3"
            },
            "album": {
                "songs": [],
                "paid": false,
                "onSale": false,
                "status": 1,
                "tags": "",
                "blurPicUrl": "http://p4.music.126.net/J32cgj_Dq-4Wpfs4U9sjwA==/2539871860943087.jpg",
                "companyId": 0,
                "pic": 2539871860943087,
                "description": "",
                "subType": null,
                "alias": [],
                "picId": 2539871860943087,
                "briefDesc": "",
                "artist": {
                    "img1v1Id": 0,
                    "alias": [],
                    "picId": 0,
                    "briefDesc": "",
                    "picUrl": "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                    "albumSize": 0,
                    "img1v1Url": "http://p3.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                    "trans": "",
                    "musicSize": 0,
                    "name": "",
                    "id": 0
                },
                "picUrl": "http://p4.music.126.net/J32cgj_Dq-4Wpfs4U9sjwA==/2539871860943087.jpg",
                "commentThreadId": "R_AL_3_1983765",
                "artists": [
                    {
                        "img1v1Id": 0,
                        "alias": [],
                        "picId": 0,
                        "briefDesc": "",
                        "picUrl": "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                        "albumSize": 0,
                        "img1v1Url": "http://p3.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                        "trans": "",
                        "musicSize": 0,
                        "name": "Piano Tribute Players",
                        "id": 99094
                    }
                ],
                "copyrightId": 0,
                "publishTime": 1321804800000,
                "company": "CC Entertainment",
                "name": "Piano Tribute to Adele",
                "id": 1983765,
                "type": "专辑",
                "size": 14
            },
            "commentThreadId": "R_SO_4_21515271",
            "artists": [
                {
                    "img1v1Id": 0,
                    "alias": [],
                    "picId": 0,
                    "briefDesc": "",
                    "picUrl": "http://p3.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                    "albumSize": 0,
                    "img1v1Url": "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",
                    "trans": "",
                    "musicSize": 0,
                    "name": "Piano Tribute Players",
                    "id": 99094
                }
            ],
            "copyrightId": 0,
            "score": 95,
            "fee": 0,
            "mvid": 0,
            "ftype": 0,
            "rtype": 0,
            "rurl": null,
            "copyFrom": "",
            "audition": null,
            "ringtone": "",
            "disc": "",
            "no": 2,
            "name": "Set Fire To The Rain",
            "id": 21515271
        }
    ],
    "equalizers": {},
    "code": 200
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Ausgabeergebnis auf Hostseite hochladen:

Hinweis: Es wird versucht, Eigentum von Nicht-Objekten in Zeile 6 einzubinden {"name":null,"artist":"Piano Tribute Players","url":null🎜>

json verfügt außerdem über zwei Befehle:

json_last_error_msg Dies dient dazu, die Fehlermeldung von json abzurufen.

json_last_error gibt den zuletzt aufgetretenen Fehler zurück
Sie können versuchen, diese beiden Befehle zu verwenden, um zu sehen, welche Fehler in json_encode aufgetreten sind.

Ich erinnere mich, dass ich so etwas im Handbuch der offiziellen PHP-Website gesehen habe:

So etwas, ich weiß nicht, ob es damit zusammenhängt...
<code>$obj->{$music->name}</code>
Nach dem Login kopieren
(Ich verwende in ähnlichen Szenarien hauptsächlich Arrays und ich habe das Gefühl, dass es in PHP einfacher zu verwenden ist als Objekte... Ich' Es tut mir leid für die Neulinge~)

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage