本文主要详细介绍一下JSON,平时在工作中使用JSON感觉使用是没有问题的,但总是感觉在对JSON上的理解还是缺少点,不能做到得心应手,所以写此文对JSON做一定的总结,后续在工作中使用JSON还会持续补充。
1.JSON具有的形式
对象(object) 是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
数组(array) 是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
值(value) 可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
字符串(string) 是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。JSON的字符串(string)与C或者Java的字符串非常相似。
数值(number) 也与C或者Java的数值非常相似。只是JSON的数值没有使用八进制与十六进制格式。
同时,可以在任意标记之间添加空白。
2.map转jsonObject
在Java中进行前后端分离开发时,如果前端传递的数据是放在HttpServletRequest请求体中,可以用如下方法将request请求体中的信息解析成jsonObject,然后再进行数据处理。
com.alibaba.fastjson.JSONObject jsonObject = mapToJSONObj(request);
private com.alibaba.fastjson.JSONObject mapToJSONObj(ServletRequest request) {
com.alibaba.fastjson.JSONObject jsonObj = new com.alibaba.fastjson.JSONObject();
Map<String, String[]> map2 = request.getParameterMap();
for (String key : map2.keySet()) {
if (map2.get(key) == null || map2.get(key).length == 0) {
jsonObj.put(key, null);
} else {
try {
String value = URLDecoder.decode(map2.get(key)[0], "utf-8");
jsonObj.put(key, value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return jsonObj;
}
3.Json字符串使用时加反斜线转义
//如下代码报错:json字符串里边“需要加反斜线转义
private static final String JSON_OBJ_STR = "{"studentName":"lily","studentAge":12}";
//如下代码不报错:json字符串转义后可以使用
private static final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}";
(1)字符串转义可以使用工具进行转义,工具连接
(2)字符串转义,如果使用的是idea进行开发,不需要转义工具,idea可以进行自动转义,eclipse不具备该功能
4.@RequestBody
(1)@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)。
(2)GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
(3)在后端的同一个接收方法里,@RequestBody 与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
@RequestMapping("mytest0")
public String myTestController0(@RequestBody String jsonString) {
System.out.println(jsonString);
return jsonString;
}