PHP - 从JSON响应

时间:2018-02-09 08:31:36

标签: php json

这是一个简单的但由于某种原因我不能让它工作。我有一个JSON字符串,我正在转换...

$results = json_decode($output);

这给了我这个......

{
  "text": "Test Text",
  "truncated": false,
  "entities": {
    "media": [
      {
        "media_url": "http:\/\/pbs.twimg.com\/media\/34453543545.jpg",
        "media_url_https": "https:\/\/pbs.twimg.com\/media\/34453543545.jpg",
        "type": "photo",
        "sizes": {
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          }
        }
      }
    ]
  }
}

我试图像这样得到media_url ......

$media_url = $results->entities->media_url;

但它没有用,也试过......

$media_url = $results[entities][media_url];

但仍然没有快乐,我哪里出错?

2 个答案:

答案 0 :(得分:3)

Media是一个数组,所以你必须这样访问它。

<?php
$str = '{
  "text": "Test Text",
  "truncated": false,
  "entities": {
    "media": [
      {
        "media_url": "http:\/\/pbs.twimg.com\/media\/34453543545.jpg",
        "media_url_https": "https:\/\/pbs.twimg.com\/media\/34453543545.jpg",
        "type": "photo",
        "sizes": {
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          }
        }
      }
    ]
  }
}';

$results = json_decode($str);

echo $results->entities->media[0]->media_url;

https://3v4l.org/s4u9X

<强>结果:

http://pbs.twimg.com/media/34453543545.jpg

此外,如果媒体中有多个元素,那么您可以遍历它们。

foreach ($results->entities->media as $item) {
    echo $item->media_url.PHP_EOL;
}

你甚至可以使用generator,它可以让你拉出第一个,或者循环它们。

$media_url = function() use ($results) {
    foreach ($results->entities->media as $item) {
        yield $item->media_url;
    }
};

// get first
echo $media_url()->current();

// or loop
foreach ($media_url() as $item){
    echo $item;
}

https://3v4l.org/DQePR

答案 1 :(得分:2)

media是数组,因此您需要访问其元素。适当的参考文献如下:

$media_url = $results->entities->media[0]->media_url;