我有这样的json数据
{key:"value"}
Run Code Online (Sandbox Code Playgroud)
(没有引号密钥......)
我想将它转换为关联数组.
PHP的json_decode返回null
如何在键周围添加引号?谢谢...
Int*_*ual 12
您可以在源处修复JSON以使其返回有效的JSON结构,也可以在键周围手动添加引号.
这个答案对一个类似问题有如何做到这一点的例子:
function my_json_decode($s) {
$s = str_replace(
array('"', "'"),
array('\"', '"'),
$s
);
$s = preg_replace('/(\w+):/i', '"\1":', $s);
return json_decode(sprintf('{%s}', $s));
}
Run Code Online (Sandbox Code Playgroud)
如果您无法在源代码中将其转换为有效的JSON,那么您可以使用Services_JSONPEAR来解析它,因为在密钥周围添加引号是一个非常容易出错的错误过程.
Services_JSON 将正确解析无效的密钥字符串.
例:
$json = new Services_JSON();
var_dump($json->decode('{key:"value"}'));
Run Code Online (Sandbox Code Playgroud)
输出:
object(stdClass)#2 (1) {
["key"]=>
string(5) "value"
}
Run Code Online (Sandbox Code Playgroud)
为了避免将双引号插入到不应该出现的位置,您应该在此操作中跳过那些引用的字符串.
例如,如果您在字符串中包含此JavaScript对象文字:
{
dt:"2016-10-22T09:13:20",
"x:y":false
}
Run Code Online (Sandbox Code Playgroud)
......然后必须注意不要22T09:改变"22T09":.此外,已引用的密钥"x:y"应保持不变.
您可以使用此正则表达式来实现:
preg_replace('/("(.*?)"|(\w+))(\s*:\s*(".*?"|.))/s', '"$2$3"$4', $text);
Run Code Online (Sandbox Code Playgroud)
JavaScript对象文字允许数字常量使用左填充的零,001和/或使用一元+符号,这在JSON中是不允许的.要删除那些有问题的字符,您可以使用此扩展版本:
preg_replace('/("(.*?)"|(\w+))(\s*:\s*)\+?(0+(?=\d))?(".*?"|.)/s', '"$2$3"$4$6', $text);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11654 次 |
| 最近记录: |