Home  >  Article  >  Backend Development  >  PHP takes out json and returns null

PHP takes out json and returns null

WBOY
WBOYOriginal
2016-08-04 09:19:03955browse

The code is as follows:

<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>

The json file is roughly like this:

<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>

Upload to host page output result:

Notice: Trying to get property of non-object in on line 6 {"name":null,"artist":"Piano Tribute Players","url":null}

Reply content:

The code is as follows:

<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>

The json file is roughly like this:

<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>

Upload to host page output result:

Notice: Trying to get property of non-object in on line 6 {"name":null,"artist":"Piano Tribute Players","url":null}

json also has two commands:
json_last_error_msg This is to get the error message of json.
json_last_error returns the last error that occurred
You can try using these two commands to see what errors occurred in json_encode.

I remember seeing something written like this in the PHP official website manual:

<code>$obj->{$music->name}</code>

This kind of thing, I don’t know if it has anything to do with it...
(I usually use arrays in similar scenarios, and I feel it’s easier to use than objects in php... I’m sorry for the newbies~)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn