Получить строку объектов, когда получить JSON-строку из файла получить содержимое (php) - PullRequest
0 голосов
/ 10 января 2019

У меня следующий код для получения строки json с YouTube:

$ dataSnippet = file_get_contents ('https://www.googleapis.com/youtube/v3/videos?part=snippet&id=jZT82WmOTkw&key=[api-key]');

Это содержание (не все):

string (3252) "{" kind ":" youtube # videoListResponse "," etag ": "\" XI7nbFXulYBIpL0ayR_gDh3eu1k / wo842EqE4etxOSsLdlZIaoKM8M0 \ "", "pageInfo": {"totalResults": 1, "resultsPerPage": 1}, "items": [{"kind": "youtube # video", "etag": "\" XI7nbFXulYBIpL0ayR_gDh3eu1k / HNnm6NCNPTGVCQmzWqpMBzSi9S8 \ "",
"id": "Mpxr7Rc0ycQ", "snippet": { "ключ к публикации": "2018-07-18Т11: 29: 51.000Z", "channelId": "UC8ezvxw6dD3dF5Xu9Aw7icA", "title": "5 странных вещей, обнаруженных на камерах безопасности и видеонаблюдении № 2", "описание": "описание", "эскизы": { "дефолт": { "url": "https://i.ytimg.com/vi/Mpxr7Rc0ycQ/default.jpg", «ширина»: 120, "высота": 90 }, "Средняя": { "url": "https://i.ytimg.com/vi/Mpxr7Rc0ycQ/mqdefault.jpg", «ширина»: 320, «высота»: 180 }, "высоко": { "url": "https://i.ytimg.com/vi/Mpxr7Rc0ycQ/hqdefault.jpg", «ширина»: 480, "высота": 360 }, "стандарт": { "url": "https://i.ytimg.com/vi/Mpxr7Rc0ycQ/sddefault.jpg", «ширина»: 640, "высота": 480 }, ......

Но когда я надеваю json_decode (assoc: true), я получаю это:

array (4) {["kind"] => string (25) "youtube # videoListResponse"
["etag"] => строка (57) "" XI7nbFXulYBIpL0ayR_gDh3eu1k / PPyttIkZuikajCWylsl_R32g_pE ""
["pageInfo"] => array (2) { [ "TotalResults"] => INT (1) [ "ResultsPerPage"] => int (1)} ["items"] => array (1) { [0] => string (8) "Array (4)"}}

особенно эта часть странная:

["items"] => array (1) { [0] => string (8) "Array (4)"}}

Как я могу получить массив с объектами? Перепробовал много вещей безрезультатно.

1 Ответ

0 голосов
/ 10 января 2019

Проблема в том, что вы используете json_decode($val, assoc: true)

Из документации php:

Когда TRUE, возвращаемые объекты будут преобразованы в ассоциативные массивы.

Так что просто не используйте true, и это должно относиться к вещам так, как вы хотите.


<?php

$json = '{
    "kind": "youtube#videoListResponse",
    "etag": "XI7nbFXulYBIpL0ayR_gDh3eu1k/wo842EqE4etxOSsLdlZIaoKM8M0",
    "pageInfo": {
        "totalResults": 1,
        "resultsPerPage": 1
    },
    "items": [
        {
            "kind": "youtube#video",
            "etag": "XI7nbFXulYBIpL0ayR_gDh3eu1k/HNnm6NCNPTGVCQmzWqpMBzSi9S8",
            "id": "Mpxr7Rc0ycQ",
            "snippet": {
                "publishedAt": "2018-07-18T11:29:51.000Z",
                "channelId": "UC8ezvxw6dD3dF5Xu9Aw7icA",
                "title": "5 Weird Things Caught on Security Cameras & CCTV #2",
                "description": "description",
                "thumbnails": {
                    "default": {
                        "url": "https://i.ytimg.com/vi/Mpxr7Rc0ycQ/default.jpg",
                        "width": 120,
                        "height": 90
                    },
                    "medium": {
                        "url": "https://i.ytimg.com/vi/Mpxr7Rc0ycQ/mqdefault.jpg",
                        "width": 320,
                        "height": 180
                    },
                    "high": {
                        "url": "https://i.ytimg.com/vi/Mpxr7Rc0ycQ/hqdefault.jpg",
                        "width": 480,
                        "height": 360
                    },
                    "standard": {
                        "url": "https://i.ytimg.com/vi/Mpxr7Rc0ycQ/sddefault.jpg",
                        "width": 640,
                        "height": 480
                    }
                }
            }
        }
    ]
}';

$val = json_decode($json);
print_r($val);

Преобразует в:

stdClass Object
(
    [kind] => youtube#videoListResponse
    [etag] => XI7nbFXulYBIpL0ayR_gDh3eu1k/wo842EqE4etxOSsLdlZIaoKM8M0
    [pageInfo] => stdClass Object
        (
            [totalResults] => 1
            [resultsPerPage] => 1
        )

    [items] => Array
        (
            [0] => stdClass Object
                (
                    [kind] => youtube#video
                    [etag] => XI7nbFXulYBIpL0ayR_gDh3eu1k/HNnm6NCNPTGVCQmzWqpMBzSi9S8
                    [id] => Mpxr7Rc0ycQ
                    [snippet] => stdClass Object
                        (
                            [publishedAt] => 2018-07-18T11:29:51.000Z
                            [channelId] => UC8ezvxw6dD3dF5Xu9Aw7icA
                            [title] => 5 Weird Things Caught on Security Cameras & CCTV #2
                            [description] => description
                            [thumbnails] => stdClass Object
                                (
                                    [default] => stdClass Object
                                        (
                                            [url] => https://i.ytimg.com/vi/Mpxr7Rc0ycQ/default.jpg
                                            [width] => 120
                                            [height] => 90
                                        )

                                    [medium] => stdClass Object
                                        (
                                            [url] => https://i.ytimg.com/vi/Mpxr7Rc0ycQ/mqdefault.jpg
                                            [width] => 320
                                            [height] => 180
                                        )

                                    [high] => stdClass Object
                                        (
                                            [url] => https://i.ytimg.com/vi/Mpxr7Rc0ycQ/hqdefault.jpg
                                            [width] => 480
                                            [height] => 360
                                        )

                                    [standard] => stdClass Object
                                        (
                                            [url] => https://i.ytimg.com/vi/Mpxr7Rc0ycQ/sddefault.jpg
                                            [width] => 640
                                            [height] => 480
                                        )

                                )

                        )

                )

        )

)

stdClass является внутренним эквивлантом PHP универсального object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...