JSON入门学习和Jackson解析器使用
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
JSON基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON参考学习:https://www.w3school.com.cn/json/index.asp。
简单来说,假设有下面一个案例:
User user = new User();
user.setName("Atlantis");
user.setAge(23);
user.setSex("男");
这是Java的对象表示,而在JavaScript中,我们也想要类似的对象或者数据,就有了下面的案例:
var user = {"name":"Atlantis","age":23,"sex":"男"}
而这就是最初JSON出现的历程,我们可以理解成JSON是JavaScript的对象表示法。
直到现在,JSON用法更加广泛,成为了存储和交换文本信息的语法,类似于XML。但JSON比XML更小、更快、更易解析。
JSON基本规则
JSON语法规则 | JSON取值范围 | 获取JSON数据 |
---|---|---|
数据在名称/值对中(键值对) | 数字(整数或浮点数) | JSON对象.键名 |
数据由逗号分隔。 | 字符串(在双引号中) | JSON对象.["键名"] |
花括号保存对象:使用{} 定义JSON格式 |
逻辑值(true 或 false) | 数组对象.[索引] |
方括号保存数组:[]
|
数组(在方括号中) | – |
– | 对象(在花括号中) | – |
– | null | – |
定义和获取JSON数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON</title>
<script>
// 1.定义基本格式
// 键用引号引起来,单双都行,也可不使用引号。最好使用同一种格式
var person = {"name": "Atlantis", age: 23, 'gender': true};
// 获取JSON的数据:
var name = person.name;
var name = person["name"];
// alert(name);
// 2.嵌套格式一 {}———> []
var Users = {
"user": [
{"name": "Atlantis", "age": 23, "gender": true},
{"name": "Andersen", "age": 24, "gender": true},
{"name": "长安", "age": 22, "gender": false}
]
};
// 获取长安的值
var name1 = Users.user[2].name;
// alert(name1);
// 2.嵌套格式二 []———> {}
var Users2 = [{"name": "Atlantis", "age": 23, "gender": true},
{"name": "Andersen", "age": 24, "gender": true},
{"name": "长安", "age": 22, "gender": false}];
// 获取Andersen值
// alert(Users2[1].name);
// 3.遍历JSON
// 获取person对象中所有的键和值
for (var key in person) {
alert(key + ":" + person[key]);
}
// 获取Users中的所有值
for (var i = 0; i < Users.length; i++) {
var user = Users[i];
for (var key in user) {
alert(key + ":" + user[key]);
}
}
</script>
</head>
<body>
</body>
</html>
JSON数据和Java对象的相互转换,即JSON解析器
常见的JSON解析器有Jsonlib、Gson、fastjson、jackson等,下面主要讲解Jackson解析器的使用。
Jackson的jar包下载【百度网盘chi0】
Java对象转JSON
使用步骤:
①导入Jackson的相关jar包;
②创建Jackson核心对象,ObjectMapper;
③调用ObjectMapper的相关方法进行转换。
ObjectMapper的相关方法 | 描述 |
---|---|
writeValue(File file,Object obj) |
将obj对象转换为JSON字符串,并保存到指定文件中 |
writeValue(Writer writer,Object obj) |
将obj对象转换为JSON字符串,并将JSON数据填充到字符输出流中 |
writeValue(OutputStream outputStream,Object obj) |
将obj对象转换为JSON字符串,并将JSON数据填充到字节输出流中 |
writeValueAsString(Object obj) |
将对象转为JSON字符串 |
readValue(String str,Class<T> aClass) |
将SJON字符串str转换为aClass对应的Java对象 |
import java.util.Date;
public class User {
private String name;
private int age;
private String gender;
private Date birthday;
// 省略构造器
// 省略get和set方法
// 省略toString方法
}
package com.atlantis.test;
import com.atlantis.entity.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
public class JacksonTest {
// Java对象转JSON字符串
@Test
public void JavaToJSON() throws Exception {
// 1.创建User对象
User user = new User();
user.setName("Atlantis");
user.setAge(23);
user.setGender("男");
// 2.创建Jackson核心对象,ObjectMapper
ObjectMapper mapper = new ObjectMapper();
// 3.转换
// 将对象转为JSON字符串
String jsonStr = mapper.writeValueAsString(user);
System.out.println(jsonStr);
// 将obj对象转换为JSON字符串,并保存到指定文件中D://json.txt
mapper.writeValue(new File("D://json.txt"),user);
// 将obj对象转换为JSON字符串,并将JSON数据填充到字符输出流中
mapper.writeValue(new FileWriter("D://json2.txt"),user);
}
}
(1)Jackson使用注解
①@JsonIgnore
:排除属性,把某个键值对排除在外,不会转换成JSON字符串。
②@JsonFormat
:属性值格式化,@JsonFormat(pattern = "yyyy-MM-dd")
。
(2)复杂的Java对象转换
如果是List和Map的话,如何转换成JSON?
List集合转换成JSON:转换后为数组格式[{},{},{}]
Map转换成JSON:转换后为对象格式{"键":"值","键":"值",...}
JSON转Java对象
可以使用readValue(String str,Class<T> aClass)
方法将JSON数据转换成Java对象。
@Test
public void JSONTOJava() throws Exception {
// 1.初始化JSON字符串
String json = "{\"gender\":\"男\",\"name\":\"Atlantis\",\"age\":23}";
// 2.创建Jackson核心对象,ObjectMapper
ObjectMapper mapper = new ObjectMapper();
// 3.转换
// 将JSON字符串转换为Java对象
User user = mapper.readValue(json, User.class);
System.out.println(user.toString());
}
推荐阅读
-
jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门
-
iOS UI入门学习之Objective-C和Swift下UIPageControl的使用讲解
-
Linux命令(shell)从入门到精通 学习笔记之2 使用find和xargs
-
vue入门学习知识要点总结(八),Vue在脚手架的使用,过渡与动画,AJAX和插槽
-
vue入门学习知识要点总结(十),Vue在脚手架的使用,vue-router路由的理解与使用和常用UI组件库
-
JSON学习(二)—— 简单实战篇(使用Jackson实现Java对象、数组与JSON的互相转换)
-
JSON入门学习和Jackson解析器使用
-
jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门
-
内网安全学习从入门到入狱-神器-Cobalt Strike-二-Beacon简介和使用
-
【Python高级学习笔记day01】Linux介绍、命令+操作系统+发展史+文件和目录+Ubuntu入门+常用 Linux 命令的基本使用+Linux 终端命令格式+Linux基本命令