分清字符集与字符编码的区别 ,json是只能用于unicode字符编码,而不是字符集 $jsonStr={“key”:”value”,”key1″:”value1″}; 默认json_decode返回为对象 $obj=json_decode($jsonStr);//返回为对象 $arr=json_decode($jsonStr,true);//返回为数组 JSON的值可以是下面这些类型:
  • 数字(整数或浮点数),比如123,12.3
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null
json在javascript中可以用eval和JSON.parse()进行解析 后者更安全只认识json,前者可以执行javascript脚本 JSON
  1. 并列的数据之间用逗号;
  2. 影射用冒号(": ")表示;
  3. 并列数据的集合(数组)用方括号:
  4. 影射的集合用大括号.
JSON的缺点
  1. 要求字符集,必须是Unicode,受约束性强
  2. 语法过于严谨,必须遵循JSON语法四个原则
  3. 映射的集合(对象)用大括号("{}")表示
JSON的优点:
  1. 数据格式比较简单,易于读写,格式多是压缩的,占用带宽小<br>
  2. 支持多种语言,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等服务器端语言,便于服务器端的解析
XML + JSON + Serialize + Array()
  1. XML 非常适合Web传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
  2. JSON
  3. Serialize是一种类似于JSON的数据格式,但是PHP的serialize是将变量序列化,返回一个具有变量类型和结构的字符串表达式。
  4. Array()基本数据类型,不能用于数据的传输和交替

json与serialize对比

$arr = array("username","age");
var_dump($arr);
var_dump(serialize($arr));
array(2) {
  [0]=>
  string(8) "username"
  [1]=>
  string(3) "age"
}
string(39) "a:2:{i:0;s:8:"username";i:1;s:3:"age";}"
string(18) "["username","age"]"
$arr = array("username"=>"hello","age"=>10);
var_dump($arr);
var_dump(serialize($arr));
var_dump(json_encode($arr));
array(2) {
  ["username"]=>
  string(5) "hello"
  ["age"]=>
  int(10)
}
string(48) "a:2:{s:8:"username";s:5:"hello";s:3:"age";i:10;}"
string(29) "{"username":hello","age":10}"

对象json和serialize化

class muke{
    protected $name= "dsfs";
    public $bbb = "doisjf";
    private $aaa = "dsiafh";
    public function a(){

    }
}
$arr = new muke();
var_dump($arr);
var_dump(serialize($arr));
var_dump(json_encode($arr));
object(muke)#1 (3) {
  ["name":protected]=>
  string(4) "dsfs"
  ["bbb"]=>
  string(6) "doisjf"
  ["aaa":"muke":private]=>
  string(6) "dsiafh"
}
string(92) "O:4:"muke":3:{s:7:"*name";s:4:"dsfs";s:3:"bbb";s:6:"doisjf";s:9:"mukeaaa";s:6:"dsiafh";}"
string(16) "{"bbb":"doisjf"}"

json字符串转回到数组或对象

$str = '{"bbb":"doisjf"}';
var_dump(json_decode($str,true));
var_dump(json_decode($str,false));

array(1) {
  ["bbb"]=>
  string(6) "doisjf"
}
object(stdClass)#1 (1) {
  ["bbb"]=>
  string(6) "doisjf"
}