>  기사  >  백엔드 개발  >  PHP는 json을 꺼내고 null을 반환합니다.

PHP는 json을 꺼내고 null을 반환합니다.

WBOY
WBOY원래의
2016-08-04 09:19:031007검색

코드는 다음과 같습니다.

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

json 파일은 대략 다음과 같습니다.

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

호스트 페이지 출력 결과 업로드:

주의: 6행에서 비객체 속성을 가져오려고 시도 중입니다. {"name":null,"artist":"Piano Tribute Players","url":null}

답글 내용:

코드는 다음과 같습니다.

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

json 파일은 대략 다음과 같습니다.

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

호스트 페이지 출력 결과 업로드:

주의: 6행에서 비객체 속성을 가져오려고 시도 중입니다. {"name":null,"artist":"Piano Tribute Players","url":null}

json에는 두 가지 명령도 있습니다:
json_last_error_msg 이것은 json의 오류 메시지를 가져오는 것입니다.
json_last_error는 발생한 마지막 오류를 반환합니다.
이 두 명령을 사용하여 json_encode에서 어떤 오류가 발생했는지 확인할 수 있습니다.

PHP 공식 웹사이트 매뉴얼에서 다음과 같은 내용을 본 기억이 납니다.

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

이런 건 관련이 있을지 모르겠네요...
(저도 비슷한 상황에서 주로 배열을 사용하는데, php에서는 객체보다 사용하기 편한 것 같아요... 저는' 뉴비들 미안해요~)

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.