2011-03-11 46 views
0

這是我的嘗試:獲取JSON結果到一個PHP數組中。怎麼樣?

$doc = new DOMDocument(); 

    $jsonurl = "http://v1.syndication.nhschoices.nhs.uk/.json?apikey=xxxxxx"; 
    $doc->load($jsonurl); 
    var_dump(json_decode($doc)); 
    var_dump(json_decode($doc, true)); 

的輸出是2個var_dumps NULL NULL。

的JSON從URL返回看起來像這樣(後查看源代碼):

[{"Text":"Live Well","Uri":"http:\/\/v1.syndication.nhschoices.nhs.uk\/livewell?apikey=xxxxx"},{"Text":"Conditions","Uri":"http:\/\/v1.syndication.nhschoices.nhs.uk\/conditions?apikey=xxxxx"},{"Text":"Organisations","Uri":"http:\/\/v1.syndication.nhschoices.nhs.uk\/organisations?apikey=xxxxx"},{"Text":"Carers Direct","Uri":"http:\/\/v1.syndication.nhschoices.nhs.uk\/carersdirect?apikey=xxxxx"}] 

這是有效的?

+1

什麼是var_dump($ doc)輸出。它有效的JSON? – Belinda 2011-03-11 11:51:45

+2

爲什麼要將JSON加載到DOMDocument中? JSON!= XML。 – mdm 2011-03-11 11:52:29

+0

只需通過http://www.jsonlint.com/將JSON置於有效位置即可:/ – JohnnyBizzle 2011-03-11 13:25:32

回答

9

如果該URL返回一個JSON字符串,你不應該使用DOMDocument類加載它:這個類是處理XML數據


相反,你應該做這樣的事情,用file_get_contents()做HTTP請求,並獲得其原始結果:

$url = 'http://v1.syndication.nhschoices.nhs.uk/.json?apikey=xxxxxx'; 
$json_string = file_get_contents($url); 
$data = json_decode($json_string); 
var_dump($data); 


一點題外話:使用file_get_contents(),使HTTP請求將僅在啓用allow_url_fopen時纔有效。

如果allow_url_fopen未啓用,則必須準備好回退到基於curl的解決方案。

+0

如果在此之後它仍然不起作用,這是由於php的json編碼和解碼非常挑剔。你可能需要重構json,然後將它傳遞給json_decode – spamoom 2011-03-11 11:54:28

+0

是的,它需要有效的JSON(以及正確的)。用http://www.jsonlint.com檢查它。 – 2011-03-11 12:01:41

+0

檢查的PHP信息:allow_url_fopen本地:開,主:開 – JohnnyBizzle 2011-03-11 12:05:12

0

您試圖以某種方式解碼DOMDocumentjson_decode適用於字符串。 DOM文檔和JSON字符串之間的關係是什麼?根本不怎麼樣。選一個!

-1
http://v1.syndication.nhschoices.nhs.uk/.json 

我覺得您的網址是不是有效? /.json也許應該是/something.json也許/json

+2

-1爲什麼這不是有效的?這是完全有效的。例如'.htaccess'。 Windows已經洗腦,認爲每個文件都必須是「file.ext」,這根本不是真的。 – 2011-03-11 11:54:03

+0

你爲什麼認爲你應該親自攻擊我?如果我不正確,請給我一些信息。順便說一下,我不使用Windows。 – 2011-03-11 11:56:41

+0

我沒有親自攻擊你。我做了一個觀察。除了通過廣泛的Windows洗腦之外,沒有理由認爲這個URL是無效的。如果它不是Windows,那麼導致您認爲某個文件必須在一段時間之前具有字符,那麼我無法想象它做了什麼! – 2011-03-11 12:00:57

0

@Pascal MARTIN

隨着它的工作原理稍作修改:

$jsonurl = 'http://v1.syndication.nhschoices.nhs.uk/.json?apikey=XXXXXX'; 
$jsonstr = json_encode(file_get_contents($jsonurl)); 
$data = json_decode($jsonstr); 
var_dump(json_decode($data)); 

我加json_encode周圍的file_get_contents電話。 感謝所有的幫助:)

+0

不知何故,這似乎是錯誤的。 'json_encode'要麼以一個數組或對象作爲輸入,而不是一個字符串。 – 2011-03-11 14:36:09

+0

var_dump數據返回一個對象。還在搞清楚如何找到元素! – JohnnyBizzle 2011-03-14 21:16:15