从JSON文件中获取第一个对象

时间:2018-03-05 21:06:10

标签: php arrays json wikidata

如果我不知道“pageid”,如何访问“thumburl”?

{
  "continue": {
    "iistart": "2004-12-19T12:37:26Z",
    "continue": "||"
  },
  "query": {
    "pages": {
      "30260": {
        "pageid": 30260,
        "ns": 6,
        "title": "File:Japanese diet inside.jpg",
        "imagerepository": "local",
        "imageinfo": [
          {
            "thumburl": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/Japanese_diet_inside.jpg/130px-Japanese_diet_inside.jpg",
            "thumbwidth": 130,
            "thumbheight": 95,
            "url": "https://upload.wikimedia.org/wikipedia/commons/e/e1/Japanese_diet_inside.jpg",
            "descriptionurl": "https://commons.wikimedia.org/wiki/File:Japanese_diet_inside.jpg",
            "descriptionshorturl": "https://commons.wikimedia.org/w/index.php?curid=30260"
          }
        ]
      }
    }
  }
}

使用php中的多个对象我可以执行此操作imageinfo[0]但是如果我放$imageurl = $data->query->pages[0]->imageinfo[0]->thumburl;它不起作用,因为它是一个对象而不是一个数组。

我该怎么做?

4 个答案:

答案 0 :(得分:3)

您可以调用get_object_vars来获取对象属性的关联数组,然后获取第一个。

$props = array_values(get_object_vars($data->query->pages));
$imageurl = $props[0]->imageinfo[0]->thumburl;

答案 1 :(得分:3)

您可以使用reset()获取第一个元素:

$data = json_decode($json) ;
$elem = reset($data->query->pages) ;
$imageurl = $elem->imageinfo[0]->thumburl ;

答案 2 :(得分:1)

你可以遍历它,所以你不需要像这样的数组键:

$pages = (array) $data->query->pages;
foreach($pages as $page) {
  $imageinfo = $page->imageinfo[0]->thumburl;
}

但这只能让你从页面列表中获取最后一个。因此,如果您知道有更多页面,则需要将这些缩略图存储在数组中。或者,如果您确定只想要第一次,只需在第一次循环后exit

答案 3 :(得分:1)

另一种方法是将数据解码并重新索引,以便始终从0开始:

$result = array_values(json_decode($json, true)['query']['pages'])[0];

然后您可以访问$result['imageinfo']['thumburl']或将其附加到上面。