[英]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.