php中Json字符串key加引号

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 );
    }

以上代码,已经过本人亲自验证,请放心使用。

你可能感兴趣的:(php中Json字符串key加引号)