【问题标题】:Failed to bring data from JSON with PHP [duplicate]无法使用 PHP 从 JSON 中获取数据 [重复]
【发布时间】:2017-11-19 19:49:10
【问题描述】:

在创建这个帖子之前我已经搜索了很多,我无法单独解决我的问题。

<?php
      $str = file_get_contents('private url');
      $json = json_decode($str);
      $json = json_decode($str, true);
      foreach($json as $x){
         $new_str = file_get_contents('private url/'.$x["anomaly_id"]);
         $new_json = json_decode($new_str);
         $new_json = json_decode($new_str, true);
         foreach($new_json as $new_x){
            echo  "<tr> <td data-title='Prefix'>".$new_x["prefix"]. "</td></tr>";
        }
      }
?>

所以,我从一个 URL 获取一些值并将其循环到另一个 URL 以获取不同的结果,但我得到了一些错误,例如:

Warning: Illegal string offset 'prefix
Undefined index: prefix

json:

{
"status": "Open",
"prefix": "153.212.26.75/32",
"group": "TABLE",
"anomaly": "Error",
"direction": "Incoming",
"decoder": {
},
 "unit": "bits/s",
 "class": "Thresholds",
 "prefix_id": {
 "prefix": "153.212.36.0/22",
 "href": "/wanguard-api/v1/ip_zones/1/prefixes/1152"
}

另外,我不能提供网址,它是私人的,不是我的。 我不知道如何解决这个问题。你能帮帮我吗?

【问题讨论】:

  • 您发布的 json 字符串无效。请改进您的问题。提供真实/准确的数据。我不是想在这个页面上欺负 - 这只是页面清理。未来的 SO 读者最受益于明确的问题和有用/正确的答案。其他任何事情都只会导致混乱和页面膨胀。

标签: php json


【解决方案1】:

看起来您正在“过度迭代”,因为数组中只有一层,删除 foreach 循环并直接访问它:

  $str = file_get_contents('private url');
  $json = json_decode($str, true);
  foreach($json as $x){
     $new_str = file_get_contents('private url/'.$x["anomaly_id"]);
     $new_json = json_decode($new_str, true);
     echo  "<tr> <td data-title='Prefix'>".$new_json["prefix"]. "</td></tr>";
  }

【讨论】:

  • ...除非我误解您想要所有 prefix 元素,包括 $new_json['prefix_id']['prefix']。什么是真实/有效的 json 值?我们都只能做出自己的假设。
  • 谢谢!现在它运行良好!
  • @Giuseppe 你赞成 Abid 的回答吗?这实际上不是一个答案,它是一条评论,通知您您发布的 json 字符串无效。 Abid 要求您改进您的问题(您应该这样做),但支持不回答/解决方案是奖励不当发布。
  • @Giuseppe Abid 不太可能在适当的位置发布他的建议,同时通过他的回答获得代表点数。
【解决方案2】:

您似乎引用了错误的 var 尝试访问 $new_x(而不是 $x2)

foreach($new_json as $new_x){
 echo  "<tr> <td data-title='Prefix'>".$new_x["prefix"]. "</td></tr>";
}

【讨论】:

  • 谢谢,我改了,还是一样。
  • 更新您的问题并添加 JSON 文件示例 .. 以便我们评估可能的内容
  • (仅供参考,这不是一个有效的解决方案,请删除)
  • 谁赞成这个错误的答案?
猜你喜欢
  • 2013-11-14
  • 2014-07-12
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多