Json完整版介绍和工具类解析应用
admin
2024-03-29 19:29:55
0

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]

#这个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 strmap=new JSONObject();

相关内容

热门资讯

【美联储理事警告:美联储货币政... 【美联储理事警告:美联储货币政策可能无法应对AI引发的失业潮 】库克称,AI已引发美国劳动力市场的代...
黄金和交易提醒:金价高位“吞没... 来源:市场资讯 文章来源:汇通财经 周三(2月26日)亚市早盘,现货黄金窄幅震荡,目前交投于5150...
IPO雷达| 百普赛斯港股IP... 百普赛斯(301080.SZ)正式向香港联交所递交招股书。根据公司同步发布的2025年度业绩预告,全...
原创 澳... 2025年一则“澳洲高薪挖角中国稀土团队”的新闻,把全球稀土市场搅得风生水起。澳大利亚莱纳斯公司甩出...
苹果收购单人AI初创公司inv... IT之家 2 月 25 日消息,据 MacRumors 报道,一份提交给欧盟的新文件显示,苹果公司已...
珍惜:由早晨跑步所想到的 我每天早晨起来习惯在校园跑步,在跑步的时候,常常会思考跑步、人生及享受人生之间的关系。 我们知道人的...
趁乱抛售?最高法院刚裁决,对冲... 来源:市场资讯 来源:金十数据 根据外媒获得的一份美国银行报告,花旗的对冲基金客户在上周五美国最高法...
特别关注|9艘!“超高规格”新... 根据广船国际官微介绍,上述MR型油轮新造船为广船国际自主设计,总长约183米、宽32.2米,设计服务...
甲骨文股价在星门项目相关报道发... 来源:环球市场播报 周一, 甲骨文股价下跌4.5%,此前报道称,这家云计算公司与OpenAI和软银的...
氨氯地平阿托伐他汀钙片用药推荐 在中国,高血压与高血脂常常结伴而行,据数据显示,不少高血压患者同时合并血脂异常。这两种疾病叠加,会让...
中国资产大涨!苹果市值一夜增超... 当地时间2月24日,美股三大指数集体收涨,纳指涨1.04%,标普500指数涨0.77%,道指涨0.7...
上节育环后需要注意什么 一、休息与活动 上节育环后要适当休息,避免剧烈运动和重体力劳动,一般建议休息1 - 2天。因为过早进...
挖矿收益不足3美分!比特币暴跌... 来源:环球市场播报 TMG Core 展台的液体浸没式冷却矿槽中的加密货币矿机。 罗森布拉特证券公...
众机构唱多三星电子:存储巨头冲... 财联社2月25日讯(编辑 史正丞)随着三星电子周二收涨3.6%,迈上每股20万韩元的历史新高,分析师...
增值税发票数据显示:春节假期消... 新华社北京2月24日电(记者刘开雄)记者2月24日从国家税务总局获悉,增值税发票数据显示,2026年...
从“向外求索”到“向内安顿”的... 从“向外求索”到“向内安顿”的消费觉醒 当商务宴席上的茅台与书房中静静摆放的谦夫子养生露酒同时出现在...
千寻智能完成近20亿元融资 北京商报讯(记者 陶凤 王天逸)2月24日,具身智能头部企业千寻智能宣布,近日连续完成两轮融资,金额...
原创 银... 最近不少人发现,家附近的银行网点悄悄关门了,有的贴出公告终止营业,有的直接撤柜清空,就连工商银行、建...
美联储理事库克称央行可能无法应... 来源:环球市场播报 美联储理事丽莎·库克警告称,美国央行可能无法应对因采用人工智能而导致的失业率上升...