用php解析多级json数据

时间:2016-07-25 15:45:58

标签: php json

    {
    "books": [
    {
      "id": 2331,
      "image": "http://lol.org/flower.png",
      "images": [
                 {
                  "256x144": "http://lol.org/bee.png",
                  "650x320": "http://lol.org/fly.png"
                  }
                 ],

....

我有上面的json数据但我的问题是如何获取650x320数据。

$data = json_decode($jsondata,true);
$gg = sizeof($data['books']);
for($x=0;$x<$gg;$x++){

以下代码可以正常使用

  $image = $data['books'][$x]['image'];

但如何在第二个json级别获取图像?我已经尝试过以下代码而没有运气。

  $image = ($data->{'books'}->{'images'}->{'320x180'});

  $image = $data['books']['images'][$x]['320x180'];

2 个答案:

答案 0 :(得分:2)

function getImageLinksFor($json, $dimension='650x320') {
    $links      =   array();
    $objJson    = json_decode($json);

    // GET THE MAIN BOOKS OBJECT...
    $books = $objJson->books;

    // LOOP THROUGH THE $books OBJECT AND PERFORM YOUR SEARCH FOR IMAGES
    foreach ($books as $obj) {
        // SINGLE OUT THE IMAGES OBJECT
        $images = $obj->images;
        // SINCE IT IS ALSO AN ARRAY, SIMPLY LOOP THROUGH IT AND FETCH THE DESIRED DIMENSION.
        foreach ($images as $key => $objImgData) {
            if(property_exists($objImgData, $dimension)){
                $links[] = $objImgData->$dimension;
            }
        }
    }
    if(count($links) == 1){
        return implode("", $links);
    }
    return $links;
}

var_dump(getImageLinksFor($json, '650x320'));

答案 1 :(得分:1)

'books'是一个对象数组,您需要使用数字索引选择一个对象。

$image = $data['books'][$insertIndexHere]['images'][$insertIndexHere]['320x180'];

基本上,您错过了第一个有效的代码[$x]'books'之间的'images'

您可能需要一个遍历每本书的循环,然后是第二个嵌套循环,它循环遍历每本书中的图像。

例如:

$gg = sizeof($data['books']);
for($x=0;$x<$gg;$x++) {
   $images = data['books'][$x]['images'];
   $sizeOfImages = sizeof($images);
   for($j = 0; $j < $sizeOfImages; $j++) {
      // access $images[$j]['320x180']
   }
}