2017-01-16 202 views
-3

我JSON數據:用PHP JSON解碼JSON解析URL

{"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']; 
} 

但得到錯誤未定義指數fname

+0

那麼你卡在哪裏?你已經找到了重要的函數'json_decode()'。 – Sirko

+0

夥計,你問題的標題有答案! – shalvah

+0

我想用這個'$ url ='http:// localhost:9200/csv/_search'; $ content = file_get_contents($ url); $ json = json_decode($ content,true); foreach($ json ['hits'] as $ item){ print $ item ['fname']; }'但出現錯誤未定義索引 – Dython

回答

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>"; 
} 

陣列的路徑和lname是這樣[hits][hits][0][_source][fname][hits][hits][0][_source][lname]。應在循環中迭代[hits][hits]以訪問每個_source元素。

由於RiggsFolly說,你需要做print_r($json)來看看數組是如何構造的,特別是當你遇到嵌套數組時。

希望它有幫助!

+0

我個人更喜歡把物體當作物體,但這是基本思想 – RiggsFolly

+0

非常感謝祕魯和裏格斯解決我的問題。 – Dython

+0

正如你所評論的那樣,問題中的JSON字符串在'jsonlint.com'上得到驗證,並且在PHP中不能與json_decode一起工作,是的,我注意到了這一點。該字符串不起作用。它會在你的情況下產生錯誤。在我的情況下,它解析字符串,不會從'json_decode'輸出任何內容。 – Perumal