JAVA序列化与JSON数据之间的关系
1.一种轻量级数据交换的文本格式,而不是一种编程语言。
2.采用完全独立于编程语言的文本格式来存储和表示(展示)数据。
3.独立于语言和平台
4.JSON 解析器和 JSON 库支持许多不同的编程语言
总结
JSON 是存储和交换文本信息的一种语法,它与XML具有相同的特性,是一种数据存储格式,
却比 XML 更小、更快、 更易于人编写和阅读、更易于生成和解析。
1.纯文本
2.具有“自我描述性”(人类可读)
3.具有层级结构(值中存在值)
4. 可通过 JavaScript 进行解析
5. 数据可使用 AJAX 进行传输
读写的速度更快
使用数组
能够使用内建的 JavaScript eval() 方法进行解析
没有结束标签
更短
不使用保留字
字符串、数值、对象、数组等,都可以通过 JSON 来表示。
数据在键/值对中,键/值对可以嵌套
数据由逗号分隔
花括号保存对象,对象可以包含多个键/值对
方括号保存数组,数组可以包含多个对象
JSON不是JavaScript语句,对象的末尾没有分号,对象和数组的最后一个成员后面,也不能加逗号。
键必须是字符串
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 }
JSON 对象
JSON 数组
JSON 布尔值
JSON 文件
1.简单一个json对象
{“baidu”:“www.baidu.com”}
2.对象嵌套
{
“baidu”:“www.baidu.com”,
“CEO”:
{
“name”:“李彦宏”,
“birthday”:19681117
}
}
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" }
]
]
JSON 文件的文件类型是 “.json”
JSON 文本的 MIME 类型是 “application/json”
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}"
实际上,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()方法。
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){
}
接收前台发送的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}
}
前提是数据库对应字段设置的数据类型 text、longtext、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对象的值 }}
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();
}
@RequestMapping("/XXXXXX")//没有这个注解前台js无法请求后台接口
@ResponseBody //没有这个注解前台接收不到字符串
其实经过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);}})
}
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);}})
}
@RequestMapping("/XXXXXX")//没有这个注解前台js无法请求后台接口@ResponseBody //没有这个注解前台接收不到字符串定义一个Person类包含的属性包括 id,name,age,address,hobby,home public String defineFunction(Person person){。。。。。。。 这个对象就能接收到对象属性被赋值,如果没被赋值为属性的默认值}
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);}})
}
@RequestMapping("/XXXXXX")//没有这个注解前台js无法请求后台接口@ResponseBody //没有这个注解前台接收不到字符串定义一个Person类包含的属性包括 id,name,age,address,hobby,home public String defineFunction(Integer id,String name,Integer age,String address.....){。。。。。。。 这些接收的参数必须每个对象才行}
JSONObject:普通json对象
JSONArray:json数组
(1)fastjson的使用
(2)net.sf.json的使用
(3)json-simple的使用
(4)gson的使用
(5)org.json的使用
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();