Json完整版介绍和工具类解析应用
JAVA序列化与JSON数据之间的关系
1.一种轻量级数据交换的文本格式,而不是一种编程语言。
2.采用完全独立于编程语言的文本格式来存储和表示(展示)数据。
3.独立于语言和平台
4.JSON 解析器和 JSON 库支持许多不同的编程语言
总结
JSON 是存储和交换文本信息的一种语法,它与XML具有相同的特性,是一种数据存储格式,
却比 XML 更小、更快、 更易于人编写和阅读、更易于生成和解析。
目录
- 1.JSON是什么
- 1.1特性
- 1.2优点
- 1.3语法--一切皆对象
- 1.4键值对要求
- 2.JSON实例应用
- 2.1JSON 对象
- 2.2JSON 元素的集合 ---json数组
- 2.3JSON 文件
- 3.前端JSON 和 JS 对象互转
- 3.1JSON.parse() 和 eval()
- 3.2如何保存json数据到数据库-这里使用Ajax方式
- 4.后端JSON 数据的接收和处理存储数据库
- 4.1接收JSON数据并进行获取--方式一
- 4.2接收JSON数据直接进行数据库存储--方式二
- 4.3接收来自数据库的JSON数据并解析获取对象的值
- 4.4将处理的数据以JSON对象返回前台js继续处理
- 4.5处理返回前台的数据接口需要添加注解
- 4.6前台js接收反馈
- 5前台js请求接口携带多个参数的方式
- 5.1Js进行请求和接收的准备之一 ----参数聚集成对象
- 5.1.1后端接口接收和反馈处理的准备 ---对象接收
- 5.2Js进行请求和接收的准备之二 ----参数分散开
- 5.2.1后端接口接收和反馈处理的准备 ---分散接收
- 6几种常用的JSON解析工具的使用
- 7JSON、JSONObject、JSONArray、Map之间的关系
1.JSON是什么
1.1特性
1.纯文本
2.具有“自我描述性”(人类可读)
3.具有层级结构(值中存在值)
4. 可通过 JavaScript 进行解析
5. 数据可使用 AJAX 进行传输
1.2优点
读写的速度更快
使用数组
能够使用内建的 JavaScript eval() 方法进行解析
没有结束标签
更短
不使用保留字
1.3语法–一切皆对象
字符串、数值、对象、数组等,都可以通过 JSON 来表示。
数据在键/值对中,键/值对可以嵌套
数据由逗号分隔
花括号保存对象,对象可以包含多个键/值对
方括号保存数组,数组可以包含多个对象
JSON不是JavaScript语句,对象的末尾没有分号,对象和数组的最后一个成员后面,也不能加逗号。
1.4键值对要求
键必须是字符串
JSON是由键和值组成,键必须是字符串,
值可以是
字符串(string)
数值(number)
对象(object)
数组(array)
boolean
null
在定义JSON键/值时,先是键名,然后冒号,然后是值。如:
"baidu": "https://www.baidu.com"
这就等价于这条 JavaScript 语句:
baidu = "https://www.baidu.com"
JSON 的字符串(string)跟C或者Java的字符串非常相似,是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义
由于JSON 字符串不能使用单引号,因此一个字符(character)就是一个单独的字符串(character string)。
JSON 数值(number)与C或者Java的数值非常相似,支持整型、浮点型,浮点型也可以用指数表示
{ "id": 001 } { "id": 1.1 } { "id": 10 }
2.JSON实例应用
JSON 对象
JSON 数组
JSON 布尔值
JSON 文件
2.1JSON 对象
1.简单一个json对象
{“baidu”:“www.baidu.com”}
2.对象嵌套
{
“baidu”:“www.baidu.com”,
“CEO”:
{
“name”:“李彦宏”,
“birthday”:19681117
}
}
2.2JSON 元素的集合 —json数组
1.数组内是值的集合,且值之间用逗号分割,每一个值都称之为数组的元素
数组的元素可以是数组、对象.
举例1:元素是对象
[
{\"a\": 1, \"b\": 0, \"c\": 1, \"d\": 31},
{\"a\": 2, \"b\": 11, \"c\": 3, \"d\": 5},
]
举例2:元素是数组
{"name": "CSDN",
"top": 1,
"netaddress": [ "https://www.csdn.net/", "https://www.csdn.net/?spm=1001.2101.3001.4476" ]
}
举例3:元素是对象和数组混合
[
{\"a\": 1, \"b\": 0, \"c\": 1, \"d\": 31},
{\"a\": 2, \"b\": 11, \"c\": 3, \"d\": 5},
"company": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
]
2.3JSON 文件
JSON 文件的文件类型是 “.json”
JSON 文本的 MIME 类型是 “application/json”
3.前端JSON 和 JS 对象互转
JSON.parse() 和 JSON.stringify()
前者是转换成键值对的形式称之为JSON字符串转换为原生的 JavaScript 值或对象
后者是将对象的键值对形式序列化为JSON字符串格式,以方便存储和数据交换。
如果该对象拥有 toJSON() 方法,那么该 toJSON() 方法就会覆盖该对象默认的序列化行为: 被序列化的不是那个原始对象,而是调用 toJSON() 方法后返回的那个对象。
将字符串对象转换成键值对的形式
JSON.parse()
var o = JSON.parse('{"name": "周杰伦","identity":"singer"}');
o.name // 周杰伦
o.identity // singer
将键值对的形式转换成字符串对象
JSON.stringify()
JSON.stringify({x: 1, y: 2}); // "{"x":1,"y":2}"
3.1JSON.parse() 和 eval()
实际上,eval() 函数的功能类似于 JSON.parse()方法,也可以将json字符串转换为json对象。如:
eval(‘(’ + ‘{“a”:1}’+‘)’).a; //1
JSON.parse(‘{“a”:1}’).a; //1
但是,eval() 函数可以执行不符合 JSON 格式的代码。如:
eval(‘(’ + ‘{“a”:alert(1)}’+‘)’).a; //弹出1
JSON.parse(‘{“a”:alert(1)}’).a; //报错
在浏览器中运行上述代码,eval() 函数就会弹出 alert 框,而 JSON.parse()方法将会报错。由于 eval() 函数会为恶意代码提供可乘之机,因此应当尽量少使用 eval() 函数,而是使用更安全的 JSON.parse()方法。
3.2如何保存json数据到数据库-这里使用Ajax方式
Ajax详解内容
var paramArr =[1,2,3,4]
var paramArr =[1,2,3,4]
<script type="text/javascript" src="js/jquery-3.5.1.js" ></script>
#这个record象征接收传参
function wait_Dispatch_Function(record){var parameter = {id:record.id};$.ajax({url:"",type:"",data: paramArr:JSON.stringify(paramArr),dataType:"json", //服务器数据返回类型success:function (flag,xhr) {。。。。。。},error:function (xhr,status,info) {alert("获取结果失败",xhr+status+info);}})
}
@Controller 后台接收
接口中对应参数 paramArr 应为 String paramArr
@Controller
@RequestMapping(“/xxxxx”)
@ResponseBody
String public receiveDate(String paramArr){
}
4.后端JSON 数据的接收和处理存储数据库
4.1接收JSON数据并进行获取–方式一
接收前台发送的JSON数据并进行处理
前端js将数组数据转化成JSON对象数据字符串,故后端接收以 String类型接收
引入 import net.sf.json.JSONArray;
@Controller
@RequestMapping("/xxxxx")
@ResponseBody
String public receiveDate(HttpSession session, HttpServletResponse response,String paramArr){
//将JSON字符串转换成 JSON数组
JSONArray jsonArray = JSONArray.fromObject(paramArr);
//对JSON数组像普通数组一样进行遍历for (int i = 0; i < jsonArray.size(); i++) {//获取对应JSON数组的某个元素对象进行获取Integer num = (Integer) jsonArray.get(i);System.out.println(num); //1、2、3、4}
}
4.2接收JSON数据直接进行数据库存储–方式二
前提是数据库对应字段设置的数据类型 text、longtext、json等方式
直接将对应字段数据以字符串方式插入数据库表字段中
4.3接收来自数据库的JSON数据并解析获取对象的值
创建一个类中属性含有private String paramArr;
select paramArr from storedata where xxxx
可能 paramArr含有很多 故采用 List paramArrlist 接收
for (int i = 0; i < paramArrlist.size() ; i++) {JSONArray jsonArray = JSONArray.fromObject(paramArrlist[i]);for (int i = 0; i < jsonArray.size(); i++) {Map map = (Map) jsonArray.getJSONObject(i);if (map.isEmpty()) {break;}System.out.println(map.get(xxx));//获取当前遍历json对象的值 }}
4.4将处理的数据以JSON对象返回前台js继续处理
key值必须是字符串
引入包 fastjson-1.2.39.jar
import com.alibaba.fastjson.JSONObject;
#data2数据可能list,可能是null,或者其他类型
public String sendFrontPage(){JSONObject jObject = new JSONObject();jObject.put("flag", "fail");try{。。。。。。jObject.put("data1", data1);//key值必须是字符串jObject.put("data2", data2);//data2数据可能list,可能是null,或者其他类型jObject.put("data3", data3);jObject.put("flag", "true");}catch(Exection e){e.printStackTrace();jObject.put("message", "XXX异常情况原因:" + e.toString());。。。。。。}catch(){。。。。。。jObject.put("message", "XXX异常情况原因:" + e.toString());}catch(){。。。。。。jObject.put("message", "XXX异常情况原因:" + e.toString());}finally(){//无论catch执不执行,finally都会执行。。。。。。}return jObject.toJSONString();
}
4.5处理返回前台的数据接口需要添加注解
@RequestMapping("/XXXXXX")//没有这个注解前台js无法请求后台接口
@ResponseBody //没有这个注解前台接收不到字符串
4.6前台js接收反馈
其实经过4.4转成json,前台接收的是json字符串
{"flag":"true"/"false",
"data1":"data1",
"data2":data2, //value 可能不是字符串可能是整型数值或者list
"data3":data3}
function sendandreceiveHouTaiResponseFunctionHandle(record){var parameter = {id:record.id};$.ajax({url:"",type:"",data: paramArr:JSON.stringify(paramArr),dataType:"json", //服务器数据返回类型//这个success 是服务器成功应答调的函数 success:function (res,xhr) {if(res.flag == true){//对数据处理console.log(res.data1);console.log(res.data2);console.log(res.data3);}。。。。。。},//这个error 是服务器失败应答调的函数 error:function (xhr,status,info) {alert("获取结果失败",xhr+status+info);}})
}
5前台js请求接口携带多个参数的方式
5.1Js进行请求和接收的准备之一 ----参数聚集成对象
function sendandreceiveHouTaiResponseFunctionHandle(record){var parameter = {id:record.id,name:name,age:age,address:address};parameter.hobby ="看电影" ;parameter.home ="大别野" $.ajax({url:"xxx.do",type:"post/get/head...",data: parameterdataType:"json", //服务器数据返回类型//这个success 是服务器成功应答调的函数 success:function (res,xhr) {if(res.flag == true){//对数据处理console.log(res.data1);console.log(res.data2);console.log(res.data3);}。。。。。。},//这个error 是服务器失败应答调的函数 error:function (xhr,status,info) {alert("获取结果失败",xhr+status+info);}})
}
5.1.1后端接口接收和反馈处理的准备 —对象接收
@RequestMapping("/XXXXXX")//没有这个注解前台js无法请求后台接口@ResponseBody //没有这个注解前台接收不到字符串定义一个Person类包含的属性包括 id,name,age,address,hobby,home public String defineFunction(Person person){。。。。。。。 这个对象就能接收到对象属性被赋值,如果没被赋值为属性的默认值}
5.2Js进行请求和接收的准备之二 ----参数分散开
function sendandreceiveHouTaiResponseFunctionHandle(record){$.ajax({url:"xxx.do",type:"post/get/head...",data:{id:record.id,//最左面的key为id是对应接口的参数 Integer idname:name,//最左面的key为name是对应接口的参数 String nameage:age,address:address......}dataType:"json", //服务器数据返回类型//这个success 是服务器成功应答调的函数 success:function (res,xhr) {if(res.flag == true){//对数据处理console.log(res.data1);console.log(res.data2);console.log(res.data3);}。。。。。。},//这个error 是服务器失败应答调的函数 error:function (xhr,status,info) {alert("获取结果失败",xhr+status+info);}})
}
5.2.1后端接口接收和反馈处理的准备 —分散接收
@RequestMapping("/XXXXXX")//没有这个注解前台js无法请求后台接口@ResponseBody //没有这个注解前台接收不到字符串定义一个Person类包含的属性包括 id,name,age,address,hobby,home public String defineFunction(Integer id,String name,Integer age,String address.....){。。。。。。。 这些接收的参数必须每个对象才行}
6几种常用的JSON解析工具的使用
JSONObject:普通json对象
JSONArray:json数组
(1)fastjson的使用
(2)net.sf.json的使用
(3)json-simple的使用
(4)gson的使用
(5)org.json的使用
7JSON、JSONObject、JSONArray、Map之间的关系
JSONObject中含有多个JSON的键值对
JSONObject对象添加在JSONArray中,JSONArray中包含多个JSONObject对象
JSONObject(JSON对象),就是一个键对应一个值,使用大括号{ }格式如下:
{"name": "李彦宏","address": "中国"}
JSONArray(JSON数组),数组里面的各项也是JSON键值对格式,使用中括号[ ]格式如下:
[{"name": "李彦宏","address": "中国"},{"name": "马云","address": "中国"}]
所以说JSON对象中添加的是键值对,JSON数组中添加的是JSON对象,使用方法如下:
JSONObject jsonobject = new JSONObject();
JSONArray jsonArray = new JSONArray();
jsonobject.put("key", "value"/value);//JSONObject对象中添加的是键值对
jsonArray.add(jsonobject);//JSONOArray数组中添加的Json对象
4、JSONObject与Map的联系
Map和JSON都是键值对,Map中键值对中间用等号分开,而JSON中键值对中间用冒号分开。
JSON就是Map的一种特殊形式的,如下:
Map<String,String> strmap=new JSONObject();
Json完整版介绍和工具类解析应用相关推荐
- lut及3D LUT Mac调色预设如何导入并应用?关于fcpx/PR/AE/PS/LR/达芬奇lut预设导入及使用方法完整版介绍!
lut预设是很多设计师用来编辑视频后期色调和图像调色的插件,通过使用LUT可以迅速达到很好的胶片质感和色彩,在此基础上稍作调整就能呈现很赞的色彩风格,lut预设格式为.cube.那么lut预设怎么用? ...
- 带疑问的歌词有哪些_抖音你在怀疑你在叹息什么歌 《万拒》歌词完整版介绍...
近段时间以来,在抖音上面有一首新歌火了起来,在这首歌当中有一句歌词是:你在怀疑你在叹息,这是一首什么歌呢?据悉,这首歌的歌名叫做<万拒>,一起来看一下这首歌的演唱者及歌词介绍. 1.抖音你 ...
- Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue
Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue 一.Neo4j 二.Neo4j客户端浏览器 三.maven依赖 四.节点/关系映射 1.NodePer ...
- java json与xml互转工具类
部分代码参考:https://blog.csdn.net/CDWLX/article/details/119038509 工具类 public class XmlMutualConversionJso ...
- 前端json格式的介绍,转换以及解析
近几日碰到json的问题比较多,我这里做一个总结,比较浅显简单,希望能对那些前端小白有所帮助,能对json有一个认识,并且能简单的处理json格式的内容. 例如最近碰到一个项目,项目需求如下: 用户选 ...
- MD5加密介绍、工具类的使用
目标 了解什么是md5,它有哪些特点 使用md5的工具类对字符串进行加密 提高md5的加密程度 应用场景 在企业中,登录账户表,里面的密码是加密的,为了防止数据管理员或IT部内部人员数据泄密.注册 ...
- 怎么用计算机弹你的酒馆对我打了烊,抖音你的酒馆对我打了烊歌词完整版介绍...
抖音上最近很火的一首歌,歌词是你出现就沉醉了时间.你出现就沉醉了时间是哪首歌的歌词?实际上,这首歌出自陈雪凝的<你的酒馆对我打了烊>.陈雪凝是抖音上一位00后创作型歌手,深受大家喜爱.下面 ...
- Java基础学习总结(54)——JSON和Map转换的工具类
在pom.xml文件中引入如下jar <dependency> <groupId>commons-lang</groupId> <artifactId> ...
- skype wifi (android),Skype_Skype完整版下载[聊天工具]-下载之家
Skype除具有即时通讯软件所需的基本功能之外,还可免费在线语音视频通话,支持全球Skype好友间24方免费语音通话,还可发起连接电脑.固话和手机多终端的24方语音通话,支持10方视频通话.采用P2P ...
最新文章
- mysql实训报告_mysql数据库技术》实验报告.doc
- 没有“好的”数据,AI就没有未来?听听云测数据怎么说
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- jvm性能调优实战 - 38System.gcy引发的惨案
- 两个各四只青蛙过河java_趣味算法——青蛙过河(JAVA)
- C++对C的加强之struct类型加强
- spring boot druid 监控没有sql记录
- Hive 外部表关联分区数据
- 中海达gps软件wince_应用|无人机航测15分钟能做啥?中海达PPK告诉你答案
- react 渲染道具_在React中学习分解道具的基础
- SpringBoot2.1.5 (9)--- GET 请求
- Python基础——字符串、列表、元组
- oracle递归查询出现死循环,oracle 递归查询求出起点、终点问题的解决方法
- 可编程控制器的基本组成部分
- 哇塞,原来自己写 Google Chrome 浏览器扩展(插件)这么容易!
- 凸优化理论基础2——凸集和锥
- maven 实战 (许晓斌)
- 警方通报“济南1家6口死亡”案:男子杀害亲人后放火跳楼
- react报错Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
- 【180730】WinForm打地鼠小游戏源码
热门文章
- Qt配置MySql数据库驱动(Windows)
- Java Lambda 表达式-Steam之两个list间交集、并集、差集
- CCS5.5出现unresolved symbol Qmss_programAccumulator,first referenced in ./src/cppi_qmss_mgmt.obj错误
- 基于Tushare一键生成股票基本面数据
- Mapper.xml中遇到大于号小于号问题解决方案
- 红队使用的那些工具(基础篇)附下载
- linux more 乱码,Linux 中vim/more/cat/tail/head 命令查看文件显示乱码
- el-input和el-tree,el-popover结合的树形结构选择框
- (三)以太坊创建多重签名钱包
- 网易云音乐每日歌曲推荐的原理是什么?