Archie2018  

前后端数据传输的原理解析:

参考博客:https://blog.csdn.net/u010900754/article/details/51395529

因为前端(常用的是js),语言是一种弱类型语言,后端假设用的是java,所以这两种语言之间就没有完全对应的数据类型,这在传数据的时候,就会需要一个中间的规则或者协议,来规范数据类型。

一般会使用JSON来将数据打包之后,作为中间媒介,然后分别在前端和后端转化成相应的数据类型。

再来看为甚是字符串类型的,那是因为前后端的通信都是通过网络层进行(简单点的有http协议),网络层不管接受到什么数据类型,都会看做是字符串。

接下来就是,前后端对数据的解析:

这种用法包括前端和后端:

前端:

1. 转化为JSON对象方便操作(将json的字符串转化为js中的对象)  

var jsonObj = JSON.parse(str);

得到的是一个json数组对象(js中对应的数据对象),可以通过

for (var key in jsonObj){}  

来遍历数组中的每个对象,其中key表示键,jsonObj[key]表示key所对应的值。

 

问题记载:

在项目中遇到使用这种遍历方式的时候,在最后会出现一个key=“remove”,value=“undefined”的键值对(业务逻辑中并没有),然后换成遍历数组的方式就不会出现这种问题了:

//jsonObj是一个json对象组成的数组,每个json对象由多个键值对组成
for (var i = 0; i < jsonObj.length; i++) {
         console.log(jsonObj[i].key); //遍历每个json对象中的某一个字段
}

2. 转化为字符串(将js对象转化成一个json的string类型)  

var jsonStr = JSON.stringify(jsonObj)   ---------->(常用于Ajax中,将返回的对象数据,转化为字符串)

后端:需要用到阿里的fastjson包(其他的用法可以参考博客:https://blog.csdn.net/zknxx/article/details/52281220

在java中,有JSONObject和JSONArray两个对象,转string就用它们的toString()函数;转对象,就用toBean()和toArray()函数。需要注意的是JSONObject必须是string的键。

3. map对象转化为 json字符串对象  

String json=JSON.toJSONString(map);

4. json对象转化为map对象  

Map map = JSON.parseObject(json);

 其他问题搜集:

1、https://blog.csdn.net/AinUser/article/details/82226738(json格式,key值一定要用 双引号 包起来)

2、https://blog.csdn.net/a_bang/article/details/51847810(给key添加双引号的方式,没试^o^)

问题记载:

后端传来的数据是一般Java格式的对象列表,在传到前端进行解析的时候,怎么也解析不对,上面的两条就是遇到的问题。

最后的解决方案是:

在后端就将数据转化为JSON格式(需要导入net.sf.json-lib包,如果在后端是List,则需要JSONArray.fromObject转化成js数组,因为在前端解析的是JSON字符串,所以还需要将JSONArray使用toJSONString转化为字符串),

在前端正常解析即可(JSON.parse)。

 

--------------------------这里分割线------------------------------

 

前期在做项目的过程中,遇到了不少类型的前后端数据传输和转化的问题,可能还会有理解不到位的地方,

所以,文章经过一次又一次的编辑和修改,希望对自己和遇到问题的各位能有帮助。

 

posted on 2019-12-19 11:47  Archie2018  阅读(1352)  评论(0编辑  收藏  举报