Ajax写多了就经常会与json格式的数据打交道,在处理Ajax返回的数据时,有时候明明感觉什么都是正常的但最后并没有得到预期的结果,很多情况下都是由于数据的格式不正确导致的,所以在这里就在总结一下json格式数据的处理。
有这样一种场景,在后端调用API接口的时候,接口返回的是json格式的数据,有时json某个元素的值还是json。
当后端取到该返回值后,通过json_decode()对 JSON 格式的字符串进行解码
,这里要特别注意了,我们先来看一下这几个函数的用法:
$arr = ['name' => 'jerry', 'age' => 22, 'gender' => 'male', 'hobby' => 'play'];
//将数组转换为json格式的 字符串
$en = json_encode($arr);
var_dump($en);
echo "\r\n";
//输出结果
string(56) "{"name":"jerry","age":22,"gender":"male","hobby":"play"}"
//将json格式的字符串转换为 对象
$de = json_decode($en);
var_dump($de);
echo "\r\n";
//输出结果
class stdClass#1 (4) {
public $name =>
string(5) "jerry"
public $age =>
int(22)
public $gender =>
string(4) "male"
public $hobby =>
string(4) "play"
}
//将json格式的字符串转换为 数组
$de_tr = json_decode($en, true);
var_dump($de_tr);
echo "\r\n";
//输出结果
array(4) {
'name' =>
string(5) "jerry"
'age' =>
int(22)
'gender' =>
string(4) "male"
'hobby' =>
string(4) "play"
}
所以有时我们传入到前段的一部分数据的值
为对象,在前段就需要将其转换为json格式的字符串,或将json格式的字符串转换为json对象(具体视情况而定)。这是就需要在js里用到JSON.parse()
和JSON.string()
这两个函数了。
还是以上面的json字符串举例子
JSON.parse()//将json格式的字符串解析为对象
JSON.parse('{"name":"jerry","age":22,"gender":"male","hobby":"play"}')
//输出结果
{name: "jerry", age: 22, gender: "male", hobby: "play"}
age: 22
gender: "male"
hobby: "play"
name: "jerry"
JSON.stringify()//将对象转换为json字符串
JSON.stringify({name: "jerry", age: 22, gender: "male", hobby: "play"});
//输出结果
"{"name":"jerry","age":22,"gender":"male","hobby":"play"}"
转换为字符串之后有时会因为一些引号问题,需要进行转义,所以就需要用到正则进行转移:
JSON.stringify(param).replace(/"/g, '"')