关于前后端JSON具体是如何通信的?

最近在学习JSON,查阅了网上很多有关的文章,这些文章大多数是解释JSON是什么.现在对JSON是什么我也能理解了,但不理解JSON是怎么在前后端之间具体是怎么处理和交互的?

我的理解是,在前端,例如表单内容为{"username":"abc",""password":123},首先是用js把json转化成字符串形式的' {"username":"abc",""password":123} ',然后通过GET或POST传送到后端。

后端以python为例,需要先找到这个字符串,然后利用json.loads()来把这段字符串转化成字典,然后进行下一步操作。

请问我的理解正确吗?

如果不正确,请告知正确答案,如果有简单的demo更好。

谢谢解答

阅读 8.1k
6 个回答

浏览器端提交数据的时候一般都是通过GET或者POST方式来传输,比如/post.php?action=edit&id=1024,拿PHP来说,就是直接用$_GET和$_POST等超全局变量在任何地方访问这些用户输出的参数,比如取参数action的值,$_GET['action'].如果你是用PHP写CGI程序,那么你就需要自己获取这些参数,大概就是先URL解码,然后按&分割,再按=分割,获取参数的名和值.

<?php
$tmp = explode('&', urldecode('action=edit&id=1024'));
$get = array();
foreach($tmp as $v) {
    $tmp2 = explode('=', $v);
    foreach($tmp2 as $v2) {
        $get[$tmp2[0]] = $tmp2[1];
    }
}
print_r($get);
<form accept-charset="utf-8" action="info.php" method="GET">
<input type="checkbox" name="os[]" value="Windows" />Windows
<input type="checkbox" name="os[]" value="Ubuntu" />Ubuntu
<input type="checkbox" name="os[]" value="Mac" />Mac
<input type="submit" name="submit" value="提交" />
</form>

上面的表单,如果勾选了3个复选框,那么提交后就对应这样的GET请求(一个数组):

info.php?os[]=Windows&os[]=Ubuntu&os[]=Mac&submit=提交
$_GET['os']:
Array
(
    [0] => Windows
    [1] => Ubuntu
    [2] => Mac
)

如果你用POST方式的话可以在Firebug之类的工具的网络里看到这个信息,而不像GET显示在URL,并记录到Web服务器的日志里.

一般是浏览器端通过AJAX访问服务器端获取数据时,服务器端才返回JSON数据,而不是浏览器端向服务器端提交JSON数据.JSON是JS里的一种数据结构,就像数组至于PHP,而PHP可以通过json_encode/json_decode在数组和JSON之间转换,PHP里的数组不区分数字数组和字典(键值对/哈希表),PHP可以用数组保存从数据库中查出的结果集,经过数组处理后json_encode成JSON串,然后返回给浏览器.浏览器端可以用jQuery.parseJSON(data)或JSON.parse(data)或eval('(' + data + ')')把返回的JSON串转成JS对象进行操作.

你的理解没有问题。
json并不神秘,就是一种约定的数据格式。和 xml (用于webservice)的用处差不多。现在很多传统的前端项目也开始从 xml 转到 json,也有一些从 json 转到 xml。两者应用领域有一点区别。具体请百度。

如果你写js,你还会知道

{"username":"abc",""password":123}

就是js的对象。

这么理解可以,json和XML一个意思;xml和二进制和json只是中间件;只是易用性,传输效率和数据处理不同而已;

简单理解,JSON是一种序列化格式,所谓的数据序列化就是将对象转化成字符串, 然后在另外一个地方利用这个字符串得到一个相同值的新对象.

  • JSON是来源于javascript的一种数据序列化方式

  • json串这种序列化方法,结构紧凑,无多余字符,所以现在不限定于js一门语言使用.

JSON 的通信跟 JSON 本身没什么关系,传输过程一般是(客户端/服务器端)把 JSON 序列化成字节流在网络中传输,然后(服务器端/客户端)接收之后再反序列化成 JSON 对象,如果接收端的语言不支持 JSON 对象,那也可以解析成字典什么的。

你所说的前端通过 GET 或 POST 方法将 JSON 数据传送的后端,其实有点问题,一般 GET 只用来向服务器发起请求然后接收数据,要提交数据用 POST、PUT、PATCH 等协议。

你的理解没有问题。
另:@eechen 的答案中,现在浏览器直接向后端发送 json 数据的情况也越来越多了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
宣传栏