JSON数组对象和JSON字符串的转化,map和JSON对象之间的转化
前后端数据传输的原理解析:
参考博客: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 = ; 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)。
--------------------------这里分割线------------------------------
前期在做项目的过程中,遇到了不少类型的前后端数据传输和转化的问题,可能还会有理解不到位的地方,
所以,文章经过一次又一次的编辑和修改,希望对自己和遇到问题的各位能有帮助。
JSON数组对象和JSON字符串的转化,map和JSON对象之间的转化的更多相关文章
- [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- jsoncpp构造json字符串和json数组
jsoncpp构造json字符串和json数组 参考文章:Jsoncpp的简单使用 下载json文件夹放在c++项目的include目录下,在CMakeLists中include进去,然后就可以在代码 ...
- JSON 数组格式
JSON 数据格式 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人 ...
- js处理ajax返回的json数组
一.json对象和json数组的区别 jsonObject = {} # json对象 jsonArray=[{},{}] # json数组 二.数据处理 前台接收到后台传过来的json数组实际上是一 ...
- Json数组基础知识
1.对象是一个无序的“‘名称/值’对”集合. (1)一个对象以“{”(左括号)开始,“}”(右括号)结束. (2)每个“名称”后跟一个“:”(冒号): (3)“‘名称/值’ 对”之间使用“,”(逗号) ...
- jquery下json数组的操作用法实例
jquery下json数组的操作用法实例: jquery中操作JSON数组的情况中遍历方法用的比较多,但用添加移除这些好像就不是太多了. 试过json[i].remove(),json.remove( ...
- highCharts怎样实现json数组数据的图形展示
昨天花了一天的时间学习了一下highcharts.主要的内容差点儿相同都看了一遍,然后试着写了一个完整的demo,期间可谓百转千回.费了不少功夫.终于还是实现了我所想要的效果图,接下来我将怎样实现统计 ...
- json数组的序列化和反序列化json数组的序列化和反序列化
如题,我就不多说了,自己看代码的,很好理解 using System; using System.Collections.Generic; using System.Web; using System ...
- python json-json.loads()函数中的字符串需要是严格的json串格式,不能包含单引号
先看下json的dumps()和loads()函数的定义 json.dumps():将一个Python对象编码成JSON字符串.把字典对象转换成json串 json.loads():将JSON格式字符 ...
- Go语言高级特性总结——Struct、Map与JSON之间的转化
Struct与Map之间互相转换 // Struct2Map convert struct to map func Struct2Map(st interface{}) map[string]inte ...
随机推荐
- js全局变量优点和缺点
全局变量的优点:可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗. 全局变量的缺点: (1)全局变量保存在静态存贮区,程序开始运行时为其分配内存,程序结束释放该内存.与局部变量的 ...
- HDU4578-Transformation-线段树的加、乘、变、次方操作
Sample Input 5 5 3 3 5 7 1 2 4 4 4 1 5 2 2 2 5 8 4 3 5 3 0 0 Sample Output 307 7489 题意:给出n,m,表示该数有n个 ...
- qcom_IMS_conference_call小结
1conference call建立 用QXDM抓qcom log: 1.拨号盘*#*#825364#*#* , 进入抓log UI 2.Connectivity-->USB Port ...
- mysql全局权限账户%登录不上ERROR 1045 (28000): Access denied for user 'zzq'@'localhost' (using password: YES)
mysql中有新建了一个%(允许所有主机连接)和ALL权限的账户.但是竟然连不上.用root或者其他localhost的用户却可以登录.首先检查下防火墙打开了没,可以用service iptables ...
- ansible了解
基础知识: ansible简介 ansible 是个什么东西呢?基于 Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言,更强的远程命令 ...
- sudo之后出现“unable to resolve host ××××”
对主机IP反解即可 打开 /etc/hosts 文件, 在 127.0.0.1 localhost 那行的后面添加你自己的主机名就好啦
- HashSet、LinkedHashSet、TreeSet的区别
HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放: LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代: Tree ...
- 2018-2-13-win10-uwp-网络编程
title author date CreateTime categories win10 uwp 网络编程 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17: ...
- 前端学习(八)sass和bootstrap(笔记)
less sass 和less基本上70%差不多(书写方式不一样) sass功能更多一点 1.定义一个变量 $b:blue; div{width:100px;height:100px; backgro ...
- linux的锁比较
spinlock spinlock介绍 spinlock又称自旋锁,线程通过busy-wait-loop的方式来获取锁,任时刻只有一个线程能够获得锁,其他线程忙等待直到获得锁.spinlock在多 ...