乐趣区

关于java:这篇SpringBoot整合JSON的学习笔记建议收藏起来写的太细了

前言

  • JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格局,目前应用特地宽泛。
  • 采纳齐全独立于编程语言的 文本格式 来存储和示意数据。
  • 简洁和清晰的层次结构使得 JSON 成为现实的数据交换语言。
  • 易于人浏览和编写,同时也易于机器解析和生成,并无效地晋升网络传输效率。

在 JavaScript 语言中,一切都是对象。因而,任何 JavaScript 反对的类型都能够通过 JSON 来示意,例如字符串、数字、对象、数组等。看看他的要求和语法格局:

  • 对象示意为键值对,数据由逗号分隔
  • 花括号保留对象
  • 方括号保留数组
    JSON 键值对 是用来保留 JavaScript 对象的一种形式,和 JavaScript 对象的写法也大同小异,键 / 值对组合中的键名写在后面并用双引号“”包裹,应用冒号 : 分隔,而后紧接着值:
{"name": "xiaotang"}
{"age": "18"}
{"sex": "男"}

很多人搞不清楚 JSON 和 JavaScript 对象的关系,甚至连谁是谁都不分明。其实,能够这么了解:

JSON 是 JavaScript 对象的字符串表示法,它应用文本示意一个 JS 对象的信息,实质是一个字符串。

var obj = {a: 'Hello', b: 'World'}; // 这是一个对象,留神键名也是能够应用引号包裹的
var json = '{"a":"Hello","b":"World"}'; // 这是一个 JSON 字符串,实质是一个字符串

JSON 和 JavaScript 对象互转
要实现从 JSON 字符串转换为 JavaScript 对象,应用 JSON.parse() 办法:

var obj = JSON.parse('{"a":"Hello","b":"World"}');
// 后果是 {a: 'Hello', b: 'World'}

要实现从 JavaScript 对象转换为 JSON 字符串,应用 JSON.stringify() 办法:

var json = JSON.stringify({a: 'Hello', b: 'World'});
// 后果是 '{"a":"Hello","b":"World"}'

测试案例

前端界面显示 JSON 数据

**1. 新建一个 springboot 我的项目
2. 在模本引擎目录先新建个 json-1.html,编写测试内容 **

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script type="text/javascript">
    // 编写一个 js 的对象
    var user = {
        name:"殷飞龙",
        age:3,
        sex:"男"
    };
    // 将 js 对象转换成 json 字符串
    var str = JSON.stringify(user);
    console.log(str);

    // 将 json 字符串转换为 js 对象
    var user2 = JSON.parse(str);
    console.log(user2.age,user2.name,user2.sex);

</script>

</body>
</html>

3. 在 IDEA 中应用浏览器关上,查看控制台输入!

管制层 Controller 返回 JSON 数据:

Jackson 应该是目前比拟好的 json 解析工具了

当然工具不止这一个,比方还有阿里巴巴的 fastjson 等等。

咱们这里应用 Jackson,应用它须要导入它的 jar 包;

SpringBoot 不必引入依赖会显示无奈关上 tomacat 次要问题 jar 包抵触

这里咱们须要两个新货色,一个是 @ResponseBody,一个是 ObjectMapper 对象,咱们看下具体的用法
1. 编写一个 User 的实体类,而后咱们去编写咱们的测试 Controller;

public class User {
    private String name;
    private int age;
    private String sex;

    public User() {}

    public User(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {return name;}

    public void setName(String name) {this.name = name;}

    public int getAge() {return age;}

    public void setAge(int age) {this.age = age;}

    public String getSex() {return sex;}

    public void setSex(String sex) {this.sex = sex;}

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

2. 编写一个 Controller

import com.example.demojson.pojo.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller // 启动能够扫描的到 Controller 的注解类
public class UserController {@RequestMapping("/json1")
    @ResponseBody
    public String json1() throws JsonProcessingException {
        // 创立一个 jackson 的对象映射器,用来解析数据
        ObjectMapper mapper = new ObjectMapper();
        // 创立一个对象
        User user = new User("殷飞龙", 18, "男");
        // 将咱们的对象解析成为 json 格局
        String str = mapper.writeValueAsString(user);
        // 因为 @ResponseBody 注解,这里会将 str 转成 json 格局返回;非常不便
        return str;
    }

}

3. 输入后果:

返回 json 字符串对立解决

在类上间接应用 @RestController,这样子,外面所有的办法都只会返回 json 字符串了,不必再每一个都增加 @ResponseBody!咱们在前后端拆散开发中,个别都应用 @RestController,非常便捷。

测试汇合输入

@RequestMapping("/json2")
public String json2() throws JsonProcessingException {

    // 创立一个 jackson 的对象映射器,用来解析数据
    ObjectMapper mapper = new ObjectMapper();
    // 创立一个对象
    User user1 = new User("殷飞龙 1 号", 18, "男");
    User user2 = new User("殷飞龙 2 号", 18, "男");
    User user3 = new User("殷飞龙 3 号", 19, "男");
    User user4 = new User("殷飞龙 4 号", 20, "男");
    List<User> list = new ArrayList<User>();
    list.add(user1);
    list.add(user2);
    list.add(user3);
    list.add(user4);

    // 将咱们的对象解析成为 json 格局
    String str = mapper.writeValueAsString(list);
    return str;
}

输入工夫对象

// 输入工夫对象
@RequestMapping("/json3")
public String json3() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();

    // 创立工夫一个对象,java.util.Date
    Date date = new Date();
    // 将咱们的对象解析成为 json 格局
    String str = mapper.writeValueAsString(date);
    return str;
}

输入后果:

  • 显示的数字的具体信息
  • 默认日期格局会变成一个数字,是 1970 年 1 月 1 日到以后日期的毫秒数!
  • Jackson 默认是会把工夫转成 timestamps 模式

    解决方案:勾销 timestamps 模式,自定义工夫格局

@RequestMapping("/json4")
    @ResponseBody
    public String json4() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();

        // 不应用工夫戳的形式
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        // 自定义日期格局对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 指定日期格局
        mapper.setDateFormat(sdf);

        Date date = new Date();
        String str = mapper.writeValueAsString(date);

        return str;
    }

工夫显示胜利

抽取为工具类

创立一个 util 包外面寄存一些工具类,缩小代码的复杂度、反复度

package com.example.demojson.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

import java.text.SimpleDateFormat;

public class JsonUtils {public static String getJson(Object object) {return getJson(object,"yyyy-MM-dd HH:mm:ss");
    }

    public static String getJson(Object object,String dateFormat) {ObjectMapper mapper = new ObjectMapper();
        // 不应用时间差的形式
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        // 自定义日期格局对象
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        // 指定日期格局
        mapper.setDateFormat(sdf);
        try {return mapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {e.printStackTrace();
        }
        return null;
    }
}

测试代码:一样的成果极大的简化

@RequestMapping("/json5")
@ResponseBody
public String json5() throws JsonProcessingException {Date date = new Date();
    String json = JsonUtils.getJson(date);
    return json;
}

输入后果:

最初

大家看完有什么不懂的能够在下方留言探讨,也能够关注我私信问我,我看到后都会答复的。也欢送大家关注我的公众号:前程有光,马上金九银十跳槽面试季,整顿了 1000 多道将近 500 多页 pdf 文档的 Java 面试题材料放在外面,助你圆梦 BAT!文章都会在外面更新,整顿的材料也会放在外面。谢谢你的观看,感觉文章对你有帮忙的话记得关注我点个赞反对一下!

退出移动版