这很不寻常。我有以下JSON文件:
{
"somekey":"someval",
"regexes":{
"url":"/([^\/]+)(?:\/\(([^\)]+)\))?\/?([\S]+)?/"
}
}
var_dump(json_decode(file_get_contents('settings.json'),true))
正在使用null
返回json_last_error()
,说我的JSON格式不正确。
我一直在检查它是否不喜欢我的正则表达式中的某些字符...删除随机位并检查...有时它会返回我的JSON对象,有时会返回{{ 1}},但我似乎无法缩小范围。我在这里缺少什么?
答案 0 :(得分:1)
对于要作为反斜杠打印的每个反斜杠,您需要四个反斜杠。因此,以下结果给出了您的预期结果:
<?php
$json = '{
"somekey":"someval",
"regexes":{
"url":"/([^\\\\/]+)(?:\\\\/\\\\(([^\\\\)]+)\\\\))?\\\\/?([\\\\S]+)?/"
}
}';
var_dump(json_decode($json));
输出:
object(stdClass)#1 (2) {
["somekey"]=>
string(7) "someval"
["regexes"]=>
object(stdClass)#2 (1) {
["url"]=>
string(40) "/([^\/]+)(?:\/\(([^\)]+)\))?\/?([\S]+)?/"
}
}
答案 1 :(得分:1)
必须使用JSON转义反斜杠。这是有效的:
{
"somekey":"someval",
"regexes":{
"url":"/([^\\/]+)(?:\\/\\(([^\\)]+)\\))?\\/?([\\S]+)?/"
}
}
var_dump
的输出将是:
array(2) {
["somekey"]=>
string(7) "someval"
["regexes"]=>
array(1) {
["url"]=>
string(40) "/([^\/]+)(?:\/\(([^\)]+)\))?\/?([\S]+)?/"
}
}