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完整版介绍和工具类解析应用相关推荐

  1. lut及3D LUT Mac调色预设如何导入并应用?关于fcpx/PR/AE/PS/LR/达芬奇lut预设导入及使用方法完整版介绍!

    lut预设是很多设计师用来编辑视频后期色调和图像调色的插件,通过使用LUT可以迅速达到很好的胶片质感和色彩,在此基础上稍作调整就能呈现很赞的色彩风格,lut预设格式为.cube.那么lut预设怎么用? ...

  2. 带疑问的歌词有哪些_抖音你在怀疑你在叹息什么歌 《万拒》歌词完整版介绍...

    近段时间以来,在抖音上面有一首新歌火了起来,在这首歌当中有一句歌词是:你在怀疑你在叹息,这是一首什么歌呢?据悉,这首歌的歌名叫做<万拒>,一起来看一下这首歌的演唱者及歌词介绍. 1.抖音你 ...

  3. Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue

    Spring Boot 整合 SpringDataNeo4j 并封装工具类解析PathValue 一.Neo4j 二.Neo4j客户端浏览器 三.maven依赖 四.节点/关系映射 1.NodePer ...

  4. java json与xml互转工具类

    部分代码参考:https://blog.csdn.net/CDWLX/article/details/119038509 工具类 public class XmlMutualConversionJso ...

  5. 前端json格式的介绍,转换以及解析

    近几日碰到json的问题比较多,我这里做一个总结,比较浅显简单,希望能对那些前端小白有所帮助,能对json有一个认识,并且能简单的处理json格式的内容. 例如最近碰到一个项目,项目需求如下: 用户选 ...

  6. MD5加密介绍、工具类的使用

    目标 了解什么是md5,它有哪些特点 使用md5的工具类对字符串进行加密 提高md5的加密程度 应用场景 ​ 在企业中,登录账户表,里面的密码是加密的,为了防止数据管理员或IT部内部人员数据泄密.注册 ...

  7. 怎么用计算机弹你的酒馆对我打了烊,抖音你的酒馆对我打了烊歌词完整版介绍...

    抖音上最近很火的一首歌,歌词是你出现就沉醉了时间.你出现就沉醉了时间是哪首歌的歌词?实际上,这首歌出自陈雪凝的<你的酒馆对我打了烊>.陈雪凝是抖音上一位00后创作型歌手,深受大家喜爱.下面 ...

  8. Java基础学习总结(54)——JSON和Map转换的工具类

    在pom.xml文件中引入如下jar <dependency> <groupId>commons-lang</groupId> <artifactId> ...

  9. skype wifi (android),Skype_Skype完整版下载[聊天工具]-下载之家

    Skype除具有即时通讯软件所需的基本功能之外,还可免费在线语音视频通话,支持全球Skype好友间24方免费语音通话,还可发起连接电脑.固话和手机多终端的24方语音通话,支持10方视频通话.采用P2P ...

最新文章

  1. mysql实训报告_mysql数据库技术》实验报告.doc
  2. 没有“好的”数据,AI就没有未来?听听云测数据怎么说
  3. 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
  4. jvm性能调优实战 - 38System.gcy引发的惨案
  5. 两个各四只青蛙过河java_趣味算法——青蛙过河(JAVA)
  6. C++对C的加强之struct类型加强
  7. spring boot druid 监控没有sql记录
  8. Hive 外部表关联分区数据
  9. 中海达gps软件wince_应用|无人机航测15分钟能做啥?中海达PPK告诉你答案
  10. react 渲染道具_在React中学习分解道具的基础
  11. SpringBoot2.1.5 (9)--- GET 请求
  12. Python基础——字符串、列表、元组
  13. oracle递归查询出现死循环,oracle 递归查询求出起点、终点问题的解决方法
  14. 可编程控制器的基本组成部分
  15. 哇塞,原来自己写 Google Chrome 浏览器扩展(插件)这么容易!
  16. 凸优化理论基础2——凸集和锥
  17. maven 实战 (许晓斌)
  18. 警方通报“济南1家6口死亡”案:男子杀害亲人后放火跳楼
  19. react报错Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
  20. 【180730】WinForm打地鼠小游戏源码

热门文章

  1. Qt配置MySql数据库驱动(Windows)
  2. Java Lambda 表达式-Steam之两个list间交集、并集、差集
  3. CCS5.5出现unresolved symbol Qmss_programAccumulator,first referenced in ./src/cppi_qmss_mgmt.obj错误
  4. 基于Tushare一键生成股票基本面数据
  5. Mapper.xml中遇到大于号小于号问题解决方案
  6. 红队使用的那些工具(基础篇)附下载
  7. linux more 乱码,Linux 中vim/more/cat/tail/head 命令查看文件显示乱码
  8. el-input和el-tree,el-popover结合的树形结构选择框
  9. (三)以太坊创建多重签名钱包
  10. 网易云音乐每日歌曲推荐的原理是什么?