【问题标题】:JSON parse URL with PHP JSON decodeJSON 解析 URL 和 PHP JSON 解码
【发布时间】:2017-05-31 04:55:20
【问题描述】:

我有 JSON 数据:

{"took":3,
"timed_out":false,
"_shards":{ "total":5,
            "successful":5,
            "failed":0
            },
"hits":{"total":105,
        "max_score":1.0,
        "hits":[
            {"_index":"csv",
            "_type":"logs",
            "_id":"AVeyr-BQodQ9UhW1sdW0",
            "_score":1.0,
            "_source":{"message":"james,wonder\r",
                        "@version":"1",
                        "@timestamp":"2016-10-11T07:40:52.332Z",
                        "path":"D:\\logstash-2.4.0\\bin\\Book1.csv",
                        "host":"CHNL-LT-544",
                        "fname":"fa1368a93aa39b2346329c1734be1f4b",
                        "lname":"wonder"
                        }
            },
            {"_index":"csv",
            "_type":"logs",
            "_id":"AVeyr-BQodQ9UhW1sdW1",
            "_score":1.0,
            "_source":{"message":"muskaan, wonder\r",
            "@version":"1",
            "@timestamp":"2016-10-11T07:40:52.332Z",
            "path":"D:\\logstash-2.4.0\\bin\\Book1.csv",
            "host":"CHNL-LT-544",
            "fname":"479085e94d305129527fa80978613e95",
            "lname":"wonder"}
            },  
{"_index":"csv","_type":"logs","_id":"AVeyr-BQodQ9UhW1sdW3","_score":1.0,"_source":{"message":"altimetrik,india\r","@version":"1","@timestamp":"2016-10-11T07:40:52.333Z","path":"D:\\logstash-2.4.0\\bin\\Book1.csv","host":"CHNL-LT-544","fname":"8b3ecf275832c79b36d62d74f47257c9","lname":"india"}},{"_index":"csv","_type":"logs","_id":"AVeyr-BQodQ9UhW1sdW8","_score":1.0,"_source":{"message":"kool,indiae\r","@version":"1","@timestamp":"2016-10-11T07:40:52.335Z","path":"D:\\logstash-2.4.0\\bin\\Book1.csv","host":"CHNL-LT-544","fname":"d2edbdce885720c70f38f36748c37600","lname":"indiae"}},{"_index":"csv","_type":"logs","_id":"AVeyr-BQodQ9UhW1sdXA","_score":1.0,"_source":{"message":"ds,dssd\r","@version":"1","@timestamp":"2016-10-11T07:40:52.336Z","path":"D:\\logstash-2.4.0\\bin\\Book1.csv","host":"CHNL-LT-544","fname":"91594a75bc6bfb0ec800d4f454e1fe87","lname":"dssd"}},{"_index":"csv","_type":"logs","_id":"AVeytJ0iodQ9UhW1sdXf","_score":1.0,"_source":{"message":"kool,india\r","@version":"1","@timestamp":"2016-10-11T07:46:02.839Z","path":"D:\\logstash-2.4.0\\bin\\Book1.csv","host":"CHNL-LT-544","fname":"d2edbdce885720c70f38f36748c37600","lname":"india"}},{"_index":"csv","_type":"logs","_id":"AVeytJ0iodQ9UhW1sdXi","_score":1.0,"_source":{"message":"karnataka,india\r","@version":"1","@timestamp":"2016-10-11T07:46:02.840Z","path":"D:\\logstash-2.4.0\\bin\\Book1.csv","host":"CHNL-LT-544","fname":"2a0785caed6bfd2ffb6ad5a449f2bd0e","lname":"india"}},{"_index":"csv","_type":"logs","_id":"AVeytv9hodQ9UhW1sdXq","_score":1.0,"_source":{"message":"james,wonder\r","@version":"1","@timestamp":"2016-10-11T07:48:39.550Z","path":"D:\\logstash-2.4.0\\bin\\Book1.csv","host":"CHNL-LT-544","fname":"fa1368a93aa39b2346329c1734be1f4b","lname":"wonder"}},{"_index":"csv","_type":"logs","_id":"AVeytv9hodQ9UhW1sdX0","_score":1.0,"_source":{"message":"rajasthan,india\r","@version":"1","@timestamp":"2016-10-11T07:48:39.558Z","path":"D:\\logstash-2.4.0\\bin\\Book1.csv","host":"CHNL-LT-544","fname":"449b07d9038569b2d69243dadfae0371","lname":"india"}},{"_index":"csv","_type":"logs","_id":"AVeytv9hodQ9UhW1sdX5","_score":1.0,"_source":{"message":"najeeb,shariff\r","@version":"1","@timestamp":"2016-10-11T07:48:39.573Z","path":"D:\\logstash-2.4.0\\bin\\Book1.csv","host":"CHNL-LT-544","fname":"be7a5e98258338fa63086f44e8bd1850","lname":"shariff"}}]}}

我只想从这个 JSON 中打印 2 个字段; fnamelname。请告诉我如何使用 PHP 实现这一目标。

$url = 'localhost:9200/csv/_search';; 
$content = file_get_contents($url); 
$json = json_decode($content, true); 
foreach($json['hits'] as $item) { 
    print $item['fname']; 
}

但出现错误未定义索引

【问题讨论】:

  • 那么你卡在哪里了?你已经找到了重要的功能json_decode()
  • 老兄,你的问题标题有答案!
  • 我正在尝试使用这个 '$url = 'localhost:9200/csv/_search'; $content = file_get_contents($url); $json = json_decode($content, true); foreach($json['hits'] as $item) { print $item['fname']; }' 但出现错误未定义索引
  • @Areik 寻求调试帮助的问题('为什么这段代码不起作用?')必须包括所需的行为、特定的问题或错误以及必要的最短代码在问题本身中重现它。没有明确的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • 只要做一个print_r($json);,你就能看到数据的结构

标签: php arrays json url


【解决方案1】:
$url = 'localhost:9200/csv/_search';; 
$content = file_get_contents($url); 
$json = json_decode($content, true);

foreach($json['hits']['hits'] as $item) { 
    echo "<p>{$item['_source']['fname']}</p>";
    echo "<p>{$item['_source']['lname']}</p>";
}

fnamelname 的数组路径类似于 [hits][hits][0][_source][fname][hits][hits][0][_source][lname][hits][hits] 应在循环中迭代以访问每个 _source 元素。

正如 RiggsFolly 所说,您需要通过 print_r($json) 来查看数组的结构,尤其是在遇到嵌套数组时。

希望对你有帮助!

【讨论】:

  • 我个人更喜欢将对象作为对象,但这是基本思想
  • 非常感谢 perumal 和 Riggs 解决了我的问题。
  • 正如您所评论的,问题中的 JSON 字符串已在 jsonlint.com 上验证,并且在带有 json_decode 的 PHP 中不起作用,是的,我也注意到了这一点。字符串不起作用。它会在您的情况下产生错误。就我而言,它解析字符串并且不从json_decode 输出任何内容。
  • 我正在尝试访问字段 cat_name 中的所有值,但有时它会有 3 个或只有 2 个值,我该如何动态处理。目前我正在尝试使用这个 $item['_source']['cat_name'] [1] 和 json 看起来像 "cat_name" : [ "primary", "secondary", "backup" ] 有时是 "cat_name" : [ "主要”,“次要”]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多