JS 用AJAX用POST 传到PHP后台的JSON字符串为什么会成为一个对象?
在PHP里面可以直接用json_decode($str),转回字符串。
为什么变成一个JSON对象了呢?难道PHP有默认解析?
直接输出是这样。
然后直接对其json_decode(,true)是这样。
露米娅斯卡雷特
9 years ago
Answers
首先你要明白JSON是什么,
JavaScript Object Notation
,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。说白了它就是一段字符串,由于并没有附加额外的标记,JS也可以直接作为对象处理,所以常用于数据交换。
PHP之所以认得JSON字符串,是因为PHP库中有
JSON_parser
来解析
这就像是两个部落之间虽然语言不通,但是约定一种东西做为统一货币来交换物品,这个‘物品’就是我们的
数据
既然JS能直接处理JSON对象,那为什么有时AJAX请求拿到的JSON字符串还需要转为JSON对象,这就要分清
JSON字符串
和
JSON对象
了
JSON字符串:指的是符合JSON格式要求的JS字符串。如下:
var jsonStr = "{id:'1',name:'Fini',age:30}";
JSON对象:指符合JSON格式要求的JS对象。如下:
var jsonObj = { id: "1", name: "Fini", age: 30 };
在PHP中,相关的操作方法有
json_encode
、
json_decode
json_encode
理论上可以将除resourse外的任何数据类型转为
JSON格式字符串
(不过有些时候会失败~囧~)
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
var_dump(json_encode($arr));
/**** result by php5.6 ****/
string '{"a":1,"b":2,"c":3,"d":4,"e":5}' (length=31)
json_decode
就是将一个
JSON格式字符串
转为PHP的
array
或
object
,这取决于第二个参数(
true
/
false
)
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
/**** result by php5.6 ****/
object(stdClass)[1]
public 'a' => int 1
public 'b' => int 2
public 'c' => int 3
public 'd' => int 4
public 'e' => int 5
array (size=5)
'a' => int 1
'b' => int 2
'c' => int 3
'd' => int 4
'e' => int 5
从不傲娇的S
answered 9 years ago