php中Json字符串key加引号
在php中,有时会遇到json字符串的key值没有加引号的情况,需要增加引号,否则json_decode()函数不能正确解析。网上的文章,做法大多是使用正则表达式替换,但是如果json的value中也含有冒号,则大多数文章的添加引号用法是错误的。
笔者参考网上的文章,自己进行了整理和测试,正确的代码如下:
//json中的Key增加上引号.
function json_replace_key($str)
{
/* //该版本没有办法解决value中带时分秒之间的冒号问题
if(preg_match('/\w:/', $str))
$str = preg_replace('/(\w+):/is', '"$1":', $str);
return $str;
*/
$str = trim( $str );
$str = ltrim( $str, '(' );
$str = rtrim( $str, ')' );
$a = preg_split('#(?<!\\\\)\"#', $str );
for( $i=0; $i < count( $a ); $i+=2 )
{
$s = $a[$i];
$s = preg_replace('#([^\s\{\}\:\,]+):#', '"\1":', $s );
$a[$i] = $s;
}
return implode( '"', $a );
}
以上代码,已经过本人亲自验证,请放心使用。