JSON的详细介绍

  本文主要详细介绍一下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,然后再进行数据处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}

  方法说明:URL中的?后数据在发起请求的时候会自动进行URLEncoder编码,所以在接受参数数据时候还需要进行URLDecoder解码

3.Json字符串使用时加反斜线转义

1
2
3
4
//如下代码报错: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()可以有多个。

1
2
3
4
5
@RequestMapping("mytest0")
public String myTestController0(@RequestBody String jsonString) {
System.out.println(jsonString);
return jsonString;
}

5.JSON工具链接

JSON格式化工具
JSON转义工具
JSON搜索工具