关于json
JSON是轻量级的文本数据交换格式
中文官网:
JSON 使用
JSON经常应用到的场景是:在后台应用程序中将响应数据封装成JSON格式,传到前台页面之后,需要将JSON格式转换为JavaScript对象,然后在网页中使用该数据。
一个简单的 JSON 对象语法:
{ "name":"w3cschool", "alexa":8000, "site":null }
JSON 对象使用在大括号({})中书写,数组使用[]来表示,对象可以包含多个 key/value(键/值)对。其中:
- key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)
- key 和 value 中使用冒号(:)分割。
- 每个 key/value 对使用逗号(,)分割。
访问对象值
var myObj, x;
myObj = { "name":"w3cschool", "alexa":8000, "site":null };
x = myObj.name;
工具站点
实际开发中有时会需要将复杂的json数据转为java对象进行封装,可以使用一个比较使用的json工具,网址为:
https://www.json.cn/json/json2java.html
json格式化网址:https://www.bejson.com/
Java中的json
Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。
下面是几个常用的 JSON 解析类库:
- Gson: 谷歌开发的 JSON 库,功能十分全面。
- FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀。
- Jackson: 社区十分活跃且更新速度很快
SpringBoot使用Jackson作为默认Json解析器,当需要返回前端Json形式数据时使用Jackson将对象转化为Json数据格式返回当我们返回前端数据带有Date数据类型时,@JsonFormat注解很方便将日期转化为我们想要的数据格式返回
示例:
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date createDate;
jackson将对象转为json字符串的方法
@Test
public void tranferObjectToJson() throws JsonProcessingException {
User user = new User();
ObjectMapper objectMapper = new ObjectMapper();
String str = objectMapper.writeValueAsString(user);
System.out.println(str);
}
Java的String字符串转为对象(注意这里的转义字符)
spring中通常在Controller层加上@ResponseBody注解就会自动返回json数据
JsonFormat注解是jackson包里面的一个注解,因此在使用的时候需要引入
fasterxml maven的jar包,如下所示。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.2</version>
</dependency>
引入fasterxml maven jar包之后,就可以在实体类属性上面使用@JsonFormat注解了,要注意的是,它只会在类似@ResponseBody返回json数据的时候,才会返回格式化的yyyy-MM-dd HH:mm:ss时间,你直接使用System.out.println()输出的话,仍然是类似“Fri Dec 01 21:05:20 CST 2017”这样的时间样式。
json工具类
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ObjectMapperUtil {
private static final ObjectMapper mapper = new ObjectMapper();
// 将对象转化为json字符串
public static String toJSON(Object obj) {
String json=null;
try {
json = mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
public static <T> T toObject(String json, Class<T> target ) {
T t = null;
try {
t=mapper.readValue(json.getBytes(),target);
} catch (Exception e) {
// TODO: handle exception
}
return t;
}
}
json测试
list中放String
{
"list": ["123","32","gfd","tyr"],
"name": "zhangsan"
}
List中存放对象的json 表示mea对象中只有一个name属性
{
"mea": [{"name":"张三"},{"name":"wangwu"}],
"name": "zhangsan"
}
json和fastjson
提供服务器端、安卓客户端两种解析工具,性能表现较好,也是目前企业开发中用的比较多的,但是fastjson之前也爆出过一些安全漏洞,见网址:https://github.com/alibaba/fastjson/wiki/security_update_20170315
实际使用时需要注意用的版本
评论区