js的字面量对象和JSON的区别

问题: 对js对象和json的区别一直不是很清楚?使用框架通过AJAX向后台传值好像一直使用js对象,后台返回数据是json.
前端向后端传递数据的时候是框架帮我们进行了json的转换吗?

阅读 5.2k
3 个回答

用JSON官网的表述,JSON( (JavaScript Object Notation))是JavaScript对象字面量的一个子集,是一种轻量的数据交换格式。

在接口调用过程中所说的json数据往往不是指js的对象,而是指的json字符串。在js向服务器提交json格式的数据,实质是将js的对象转换成json字符串再放在http请求中进行传递。当接收到服务端响应的json格式的数据时,接收到的也是json字符串,底层会将json字符串转换成js的对象以便操作。

其实json对象也是js对象的一种表现形式,或者说json是限定的js对象也行。说白了,无非就是把key用双引号括起来,value限定为数字、字符串、布尔值和NULL中的一种,再考虑下对象和数组嵌套情况的,比较特殊的js对象而已。所以转换什么的,框架顺便就弄了呗。

用PHP视角来看,JSON就是PHP里的关联数组,就是键值对.

echo json_encode(array( 'A', 'B' ));           // ["A","B"]
echo json_encode(array( 0 => 'A', 1 => 'B' )); // ["A","B"]
echo json_encode(array( 0 => 'A', 2 => 'B' )); // {"0":"A","2":"B"}

前端jQuery AJAX传输JSON给后端PHP.

前端:

var arr = {Client:"jQuery",Server:"PHP"}; //键名没有用双引号包围
var str = JSON.stringify(arr); //对象转为字符串后键名被加上了双引号
console.log(str); //输出 {"Client":"jQuery","Server":"PHP"}
var img = {};
$("img").each(function(index, ele){
    //console.log("键:"+index+" 值:"+$(ele).attr('src'));
    img[index] = $(ele).attr('src');
});
console.log(img); //输出 { 0="//c1.mifile.cn/1.png",  1="//c1.mifile.cn/2.png"}
$.post(
    "http://127.0.0.1/test.php", //url:发送请求地址
    {name:"ele", pass:"123", json:arr}, //data:待发送的K:V参数
    function(data){ //callback:发送成功时的回调函数
        console.log(data);
    }
);

后端:

<?php
header('Content-Type: text/plain; charset=utf-8');
header('Access-Control-Allow-Origin: http://www.mi.com');
var_export($_POST);
//json:arr时输出
array (
  'name' => 'ele',
  'pass' => '123',
  'json' => 
  array (
    'Client' => 'jQuery',
    'Server' => 'PHP',
  ),
)
//json:str时输出
array (
  'name' => 'ele',
  'pass' => '123',
  'json' => '{"Client":"jQuery","Server":"PHP"}',
)
//json:img时输出
array (
  'name' => 'ele',
  'pass' => '123',
  'json' => 
  array (
    0 => '//c1.mifile.cn/1.png',
    1 => '//c1.mifile.cn/2.png',
  ),
)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题