簡體   English   中英

PHP - json_decode 給出 NULL

[英]PHP - json_decode giving NULL

我正在嘗試使用如何在 PHP 中搜索 JSON 數組中給出的建議,以根據 .json 文件中的國家代碼查找國家名稱。

我有一個文件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部分需要在這可能之前工作。

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

這就是字符串應該如何格式化:

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

擴展 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 )需要更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM