繁体   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