PHP - json_decode给出NULL

时间:2017-08-22 09:00:33

标签: javascript php arrays json

我正在尝试使用How to search through a JSON Array in PHP中提供的建议,根据.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部分需要在可能的情况下工作。

任何帮助表示感谢。

作为参考,使用countries =的原因是根据此处给出的建议填充<select>元素:Populating select using ajax json array

2 个答案:

答案 0 :(得分:4)

如果json_decode返回null,则表示输入字符串的格式不正确。您的文件包含javascript变量而不是JSON字符串。

这就是字符串应该格式化的方式:

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

答案 1 :(得分: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)需要更改。