关于json编码解码的问题

其实json编码解码应该是一件很简单的事情,提供的类或库函数用起来也就是encode、decode,似乎不是一件很复杂的事情;但随着json的 使用的越来越多,还真就发现了一些不能不去注意的问题。

1.   含有自引用属性的类的encode和decode
       在js中, {"me":this} 是一个合法的对象,但是PHP对该对象做decode时,结果是: NULL
       在PHP中:
<?php
class test {
    public 
$a;
    
// 注意: 不能直接写为:
    // public $a = $this;
    
public function __construct() {
        
$this->$this;
    }
}
?>

test是一个合法的类,但是PHP对该对象做encode时,结果:
Warning: json_encode(): recursion detected in E:\home\desktop\test.php on line 26
{"a":{"a":null}}

2.  单引号的问题, key、value最好使用双引号来引
$obj json_decode('{"me":"this"}');  // 属性和值都是用双引号
var_dump($obj);

结果:
object(stdClass)#2 (1) {
  ["me"]=>
  string(4) "this"
}

$obj json_decode("{'a':'this'}");  // 属性和值都是用单引号
var_dump($obj);

结果: NULL

使用Services_JSON 倒是没有问题的
$json = new Services_JSON();
var_dump($json->decode("{'a':'this'}"));
exit;

输出:
object(stdClass)#2 (1) {
  ["a"]=>
  string(4) "this"
}

3.  特殊字符的转移问题
对于双引号、斜线、反斜线是需要转义的

今天重新了解了json这个东西,仔细解读了: http://json.org/  ,特别是里面的图的理解。

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据