【问题标题】:JSON Parsing issue with PHPPHP的JSON解析问题
【发布时间】:2016-01-28 10:15:01
【问题描述】:

我正在尝试从 WoWProgress API 中提取数据。我想在线解析数据并在发布它们以供查看时直接解码它们。我仍在学习,但我似乎遇到了这个数组的问题。真的需要一些帮助。

$json = file_get_contents("http://www.wowprogress.com/guild/eu/twisting-nether/hellenic%20horde/json_rank");
if($json == false)
{
throw new Exception("Failed To load infomation. Check setup options");
}
$result = json_decode($json, true);
echo "<pre>";
foreach ($result["realm_rank"] as $value) {
    print_r($value);
}
echo "</pre>";

但我收到的只是“为 foreach() 提供的参数无效”

真的很想得到一些帮助。 提前致谢!

对不起我的英语。英语不是我的母语。

【问题讨论】:

  • 看起来$result["realm_rank"] 是一个整数值,而不是一个数组。

标签: php json parsing


【解决方案1】:

$result['realm_rank'] 是一个字符串,而不是一个数组。

因此,foreach 导致错误。

当数组未设置、为空或不是数组时会导致此错误。

<?php
$json = file_get_contents("http://www.wowprogress.com/guild/eu/twisting-nether/hellenic%20horde/json_rank");
if ($json == false) {
 throw new Exception("Failed To load infomation. Check setup options");
}
$result = json_decode($json, true);
 if (isset($result['realm_rank'])) {
  if (is_array($result['realm_rank'])) {
   foreach ($result["realm_rank"] as $value) {
    echo "<pre>";
    print_r($value);
    echo "</pre>";
   }
  } 
  else {
   echo $result['realm_rank'];
  } 
}
else {
 echo 'Unknown error';
}
?>

【讨论】:

    【解决方案2】:

    你的 $result["realm_rank"] 不是一个数组,而是一个整数。你不能迭代一个整数。

    尝试简单地打印它:

    print_r($result["realm_rank"]);
    

    【讨论】:

      【解决方案3】:

      $result的结果是这个

      print_r($result);
      
      Array
      (
          [score] => 750000
          [world_rank] => 2117
          [area_rank] => 1031
          [realm_rank] => 44
      )
      

      为 foreach() 提供的参数无效意味着 $result["realm_rank"] 不是数组。

      对于解决方案,您可以使用以下值:

      foreach($result as $value) {
          echo $value. "<br/>";
      }
      

      或者直接使用

      echo $result["realm_rank"]; 
      

      【讨论】:

        【解决方案4】:

        $result["realm_rank"] 不是一个数组而是一个值。所以你不能在foreach中传递它。

        只要做:

        print_r($result["realm_rank"]);
        

        我试过这个及其工作:

        <?php
        
        $json = file_get_contents("http://www.wowprogress.com/guild/eu/twisting-nether/hellenic%20horde/json_rank");
        if($json == false)
        {
        throw new Exception("Failed To load infomation. Check setup options");
        }
        $result = json_decode($json, true);
        echo "<pre>";
            print_r($result["realm_rank"]);
        echo "</pre>";
        ?>
        

        【讨论】:

        • 但是我的桌子是空的。
        【解决方案5】:

        除非您特别需要将其转换为数组以循环遍历值,否则您可以将其保留为默认对象格式并直接按名称访问值。

        define('NL',PHP_EOL);/* only to prettify output */
        
        $json = file_get_contents("http://www.wowprogress.com/guild/eu/twisting-nether/hellenic%20horde/json_rank");
        
        if( !$json ) {
            throw new Exception("Failed To load infomation. Check setup options");
        }
        
        $json = json_decode( $json );
        
        echo '<pre>',
            $json->score . NL, 
            $json->world_rank . NL, 
            $json->area_rank . NL, 
            $json->realm_rank . NL,
            '<pre>';
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多