2017-08-22 138 views
-1

我試圖使用How to search through a JSON Array in PHP中給出的建議來根據.json文件中的國家/地區代碼查找國家/地區名稱。PHP-json_decode given NULL

我有一個文件,其中countrycodes.js的格式如下:

countries = [ 
    {code: "GB", name: "United Kingdom"}, 
    {code: "AF", name: "Afghanistan"}, 
    // ... 
    {code: "ZM", name: "Zambia"}, 
    {code: "ZW", name: "Zimbabwe"} 
]; 

變量,countries必須有,因爲應用程序的一部分依賴於這一點。

在PHP中我已經做了以下內容:

$str = file_get_contents('countrycodes.js'); 
var_dump($str); 

它輸出的字符串:

string(9642) "countries = [ 
{code: "GB", name: "United Kingdom"}, 
{code: "AF", name: "Afghanistan"}, 
// ... 

然而,當我嘗試json_decode它,下面給出NULL

$str = file_get_contents('countrycodes.js'); 
$json = json_decode($str); 
var_dump($json); 

我不知道爲什麼這是因爲json_decode接受字符串,這是我上面發佈的鏈接上給出的內容?我嘗試刪除JavaScript變量(countries =),但這沒有什麼區別。

最終我想要做的是能夠給PHP一個國家code如'GB',並讓它返回適當的name例如'英國'。我對此的理解是json_decode部分將需要工作,這是可能的。

任何幫助表示讚賞。

作爲參考,正在使用countries =的原因是基於這裏給出的建議填充一個<select>元素:Populating select using ajax json array

+1

'countrycodes.js'是Javascript,而不是JSON ... –

+0

好的謝謝。有什麼方法可以轉換它,而不必將其存儲在兩個單獨的文件中? – Andy

+1

沒有辦法,這是理智的。 –

回答

4

如果json_decode回報null,這意味着輸入字符串是不是有效的格式。您的文件包含一個javascript變量而不是JSON字符串。

這是怎麼串也許應該格式化:

{ 
    "countries": [ 
     {"code": "GB", "name": "United Kingdom"}, 
     {"code": "AF", "name": "Afghanistan"}, 
     {"code": "ZM", "name": "Zambia"}, 
     {"code": "ZW", "name": "Zimbabwe"} 
    ] 
} 
+0

我可以重新格式化文件,看起來像這樣。然而,這將不可避免地打破我很難實現基於文件內容填充'select'元素 - 細節在這裏https://stackoverflow.com/questions/45795518/populating-select-using-ajax- JSON陣列/ 45797083。那麼是否有可能根據您提供的格式填充「select」?我正在設法考慮一個涵蓋兩個要求的解決方案。謝謝。 – Andy

+1

這不是一個非常好的解決方案。你應該看看['.getJSON()'](https://api.jquery.com/jquery.getjson/)函數來獲取客戶端的json文件。 – Jerodev

+0

@Jerodev你能確認這是如何格式化字符串?因爲當'json_decode()'時,它仍然給'NULL'作爲輸出。 – Andy

0

擴展上Jerodev的答案,如果你 不能 不會改變的表示,你可以做到以下幾點。

因此你可以使用引號包住鍵修改您的文件。類似的,

countries = [ 
    {"code": "GB", "name": "United Kingdom"}, 
    {"code": "AF", "name": "Afghanistan"}, 
    // ... 
    {"code": "ZM", "name": "Zambia"}, 
    {"code": "ZW", "name": "Zimbabwe"} 
]; 

然後只是解碼json部分。

$str = file_get_contents('countrycodes.js'); 
$str = substr($str,12, strlen($str)-13); // do not include the semicolon 
var_dump(json_decode($str)); 

但是這不是一個好的方法,所以我仍然建議尋找其他方法來填充元素中的數據。

請注意,12[開始的位置,如果您對變量名稱或空格進行了任何更改((和13)需要更改)。

+1

謝謝。按照Jerodev的建議,我很樂意重新格式化文件。這個問題起源於我在https://stackoverflow.com/questions/45795518/populating-select-using-ajax-json-array/45797083中給出的建議,來自擁有9k名譽的人,他們的解決方案似乎適用於那個特別的問題。我將重新格式化我的文件,並根據@Jerodev的建議查看'$ .getJSON()'。 – Andy

+0

很酷。好的選擇! – cipher

相關問題