我正在尝试使用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
答案 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
)需要更改。