2017-04-21 113 views
0

如何通过PHP中的此JSON字符串循环并获取所有URLS?PHP通过POST请求循环JSON字符串

{ 
    "item": "1.2.840.113619.2.55.1.1762903756.1942.1319006898.442", 
    "title": [{ 
      "images": "{'1.2.840.113619.2.55.1.1762903756.1942.1319006898.446.1':{'url': 'https:www.example11.com', 'observationTime': 'None'}}" 
     }, 
     { 
      "images": "{'1.2.840.113619.2.55.1.1762903756.1942.1319006898.446.1':{'url': 'https:www.example33.com', 'observationTime': 'None'}, '1.2.840.113619.2.55.1.1762903756.1942.1319006898.446.55':{'url': 'https:www.example44.com', 'observationTime': 'None'}, '1.2.840.113619.2.55.1.1762903756.1942.1319006898.446.99':{'url': 'https:www.example55.com', 'observationTime': 'None'}}" 
     }, 
     { 
      "images": "{'1.2.840.113619.2.55.1.1762903756.1942.1319006898.446.1':{'url': 'https:www.example66.com', 'observationTime': 'None'}}" 
     } 
    ] 
} 

尝试了以下内容,并没有为你的工作有所帮助

$data=json_decode ($stringBody,TRUE); 
for($i=0; $i<count($data['title']); $i++) { 
    $data=$data['title']; 

    foreach($data as $obj){ 
    $imagesData =$obj['images']; 

     foreach($imagesData as $value){ 
      print "<p>" . $value->url . "</p>"; 
     } 

    } 
} 

感谢。

+2

你应该在循环变量使用不同的名称;不要覆盖'$ data'。还要注意,你不需要循环中的循环,1应该这样做。 – jeroen

+1

因为你已经在json解码中传递了true,它将转换为递归多维数组..所以使用'$ value ['url']'而不是'$ value-> url' –

+0

@jeroen谢谢,试过你的建议,它没有没有工作。 foreach($ imagesData as $ value){ print“

”。 $ value-> url。 “

”; }永远不会被调用 –

回答

-1
$data=json_decode ($stringBody,TRUE); 
for($i=0; $i<count($data['title']); $i++) { 
    $data=$data['title']; 

    foreach($data as $obj){ 
    $imagesData =$obj['images']; 

     foreach($imagesData as $value){ 
      print "<p>" . $value['url'] . "</p>"; 
     } 

    } 
} 
+0

仔细查看代码,特别是在'$ data = $ data ['title'];' – RiggsFolly

+0

谢谢,但是,最后一个forder循环从不会被调用。它不起作用 –

+0

用于foreach而不用于 – Hacker

1
$array_data = json_decode($json_data, true)["title"]; 
for ($i = 0; $i < count($array_data); $i++) { 
    $image = $array_data[$i]['images']; 
    //As the content in image is not a valid json 
    // Convert to valid json 
    $image_valid_json = str_replace("'", "\"", $image); 
    //change to array 
    $image_data = json_decode($image_valid_json, true); 
    //get the long key 
    $key = array_keys($image_data); 
    // Changes as per your question 
    for ($j = 0; $j < count($key); $j++) { 
     $url = $image_data[$key[$j]]['url']; 
     echo $url . "\n"; 
    } 
} 

您的JSON的图像中的数据只是一个字符串,这是不是在jsonlint验证的有效的JSON。所以在使用它之前,你需要转换成json,然后只有你可以解码到数组并访问url。

+0

这看起来很有前途。我得到了一些URL而不是全部。我认为这行$ url = $ image_data [$ key [0]] ['awsurl'];只显示每张图片的第一个网址 –

+0

@ ErnestAppiah所有的网址都是一样的,改成你会选择所有的网址 –

+0

优秀!!!非常感谢。它现在有效 –

0

试试这个PHP代码

$data=json_decode ($stringBody,TRUE); 
foreach($data['title'] as $url){ 
    $string = "[" . str_replace("'", '"', $url['images']) . "]"; 
    $json = json_decode($string,true); 
    foreach($json[0] as $key => $val){ 
    print_r($json[0][$key]['url']); 
    echo "<br/>"; 
    } 
}