欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSON入门学习和Jackson解析器使用

程序员文章站 2022-06-01 07:50:05
...

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);
    }
}

JSON入门学习和Jackson解析器使用
(1)Jackson使用注解
@JsonIgnore:排除属性,把某个键值对排除在外,不会转换成JSON字符串。
@JsonFormat:属性值格式化,@JsonFormat(pattern = "yyyy-MM-dd")
JSON入门学习和Jackson解析器使用
(2)复杂的Java对象转换
如果是List和Map的话,如何转换成JSON?

List集合转换成JSON:转换后为数组格式[{},{},{}]
JSON入门学习和Jackson解析器使用
Map转换成JSON:转换后为对象格式{"键":"值","键":"值",...}JSON入门学习和Jackson解析器使用

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());
    }

JSON入门学习和Jackson解析器使用

相关标签: JSON Jackson