前言

  • 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")@ResponseBodypublic String json5() throws JsonProcessingException {    Date date = new Date();    String json = JsonUtils.getJson(date);    return json;}

输入后果:

最初

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