2016-07-25 457 views
0
{ 
    "books": [ 
    { 
     "id": 2331, 
     "image": "http://lol.org/flower.png", 
     "images": [ 
       { 
        "256x144": "http://lol.org/bee.png", 
        "650x320": "http://lol.org/fly.png" 
        } 
       ], 

.... 

我有类似上面的json数据,但我的问题是如何获取650x320数据。下面使用php解析多级json数据

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

代码的第二JSON级工作正常

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

,但如何获取图片?我试过下面的代码,没有运气。

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

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

做'$ data'的'print_r'看到PHP的数据结构,它得到了JSON的。 – ceejayoz

+1

$ data ['books'] [0] ['images'] [0] [“320x180”]; – Vanojx1

+0

$ image = $ data ['books'] [$ x] ['images'] [0] [“320x180”]; 是的,这解决了我的问题。 – sukkis

回答

1

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

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

基本上你已经从你的作品首次码错过'books''images'之间的[$x]

你可能会想要一个遍历每本书的循环,然后循环遍历每本书中图像的第二个嵌套循环。

例如:

$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'] 
    } 
} 
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'));