php - 在json文件的第一個對象中,php如何限制

  显示原文与译文双语对照的内容
106 0

你好,我正在嘗試將json文件列印到表格。json文件來自這個網站 https://jsonvat.com/我想列印$data->rates->periods->rates[0]->standard我得到了

"不能使用類型為。的對象作為 array 中的對象。"。"。"

我的代碼是:

$data = json_decode($response);
echo '<table class="table"><thead><tr><th scope="col">Country</th><th scope="col">First</th><th scope="col">Last</th><th scope="col">Handle</th></tr></thead><tbody>';
foreach($data->rates as $rate){
 echo '<tr><th scope="row">'.$rate->name.'</th>';
 foreach($rate->periods as $period){
 echo '<td>'.$period->rates->standard.'</td><td>'.$period->rates->redused.'</td><td>'.$period->rates->super_reduced.'</td></tr>';
 }
}
echo '</tbody></table>';

當我將 $data = json_decode($response); 更改為$data = json_decode($response, true);代碼變成

foreach($data as $rate){
 echo '<tr><th scope="row">'.$rate['name'].'</th>';

我有一個錯誤

警告:第 23行 C:xampphtdocswordpresswp-contentpluginstest-plugfunctions.php 中的非法字元串偏移量'姓名'。

先謝謝了。

时间:原作者:0个回答

95 0

你需要更改你的代碼,如下所示:

$json = file_get_contents("https://jsonvat.com/");
$dataObject = json_decode($json, true);
echo '<table class="table"><thead><tr><th scope="col">Country</th><th scope="col">First</th><th scope="col">Last</th><th scope="col">Handle</th></tr></thead><tbody>';
foreach($dataObject['rates'] as $rate){
 echo '<tr><th scope="row">'.$rate['name'].'</th>';
 foreach($rate['periods'] as $period){
 echo '<td>'.$period['rates']['standard'].'</td><td>'.$period['rates']['reduced'].'</td><td>'.$period['rates']['super_reduced'].'</td></tr>';
 }
}
echo '</tbody></table>';

在這裡,我發現在速率鍵中有些減少或者super_reduced鍵不存在。因此,你需要相應地更改代碼。希望能幫助你。

原作者:
120 1
 $tarray = json_decode($sjson);
$newarray = array('sample'=>array());
foreach($tarray->name as $ix => $name) {
 $newarray['catalog'][]=array(
 'name' => $tarray->name[$ix],
 'image' => $tarray->image[$ix],
 'price' => $tarray->price[$ix],
 );
}
$sjson = json_encode($newarray);

或者你可以使用. split( )

原作者:
51 4

你試圖訪問( 包括的錯誤)的各種元素有幾個問題。並非所有元素都有減少( 非'redused') 值,有些元素具有 reduced1 ( 還有 reduced2 ) 值或者非完全值,與super_reduced相同。如果沒有找到值,則在代碼中使用null合併() 來設置默認值。你可以能想要調整這些,以顯示你覺得最好顯示沒有價值的東西。

 echo '<td>'.$period->rates->standard.'</td><td>'.
 ($period->rates->reduced??$period->rates->reduced1??'Non').
 '</td><td>'.($period->rates->super_reduced??'Non').'</td></tr>';
原作者:
52 0

你可以使用簡單的foreach() 循環訪問這些值,並在 <tr> 元素中設置為

 $array = json_decode($json,1);
 foreach($array['rates'] as $k=>$v){
 echo $v['periods'][0]['rates']['standard'].PHP_EOL;
 }

演示:https://3v4l.org/O9EjB

原作者:
105 4

你誤解了 json_decode的第二個參數:醫生告訴我:

當 true 時,返回的對象將被轉換為關聯數組。

因此,在你使用 $data->rates 訪問速率之前,現在應該使用 $data['rates'] ( 對於 $rate->periods,也為 $rate['periods'] ) 。

因此,你應該看起來像( 未測試)

foreach($data['rates'] as $rate) {
 echo '<tr><th scope="row">'.$rate['name'].'</th>'; 
}
原作者:
...