首页 > 技术文章 > JSON

qqkkOvO 2020-11-08 11:55 原文

什么是JSON?

JSON(JavaScript Object Notation,JS对象标记语言),一种轻量级的数据交换格式

通常用于:

  • 与服务器交换数据
  • 接收服务器数据时一般是字符串
  • 可以使用JSON.parse() 方法将字符串解析为 JavaScript 对象
  • 向服务器发送数据一般是字符串
  • 可以使用JSON.stringify(),把JavaScript对象转为字符串

语法规格

JS中,一切皆对象,任何支持的类型都可以通过JSON来表示。例如,字符串、数字、数组、对象等。其中数组和对象是比较特殊且常用的两种类型:

  • 对象表示为键值对
  • 花括号保存对象:{"name1":"xxx", "name2":"xxx", "name3":"xxx", }
  • 数据由逗号分隔
  • 方括号保存数组【"xx","xxx","xxxx"】

测试

  1. 导包

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.11.3</version>
            </dependency>
    
  2. spingmvc.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <context:component-scan base-package="com.kk.controller"/>
    
        <!--1.开启注解驱动-->
        <mvc:annotation-driven>
            <!--解决json乱码问题-->
            <mvc:message-converters register-defaults="true">
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <constructor-arg value="UTF-8"/>
                </bean>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="objectMapper">
                        <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                            <property name="failOnEmptyBeans" value="false"/>
                        </bean>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
    
        <!--2.静态资源过滤-->
        <mvc:resources location="/js/" mapping="/js/**"/>
        <mvc:resources location="/css/" mapping="/css/**"/>
        <mvc:resources location="/img/" mapping="/img/**"/>
    
        <!--3.视图解析器-->
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/page/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
        
    </beans>
    
  3. controller

    package com.kk.controller;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.kk.pojo.User;
    import com.kk.utils.JsonUtil;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.Date;
    
    @Controller
    public class TestJson {
    
    
        @RequestMapping("/json")
        @ResponseBody
        public String json() throws JsonProcessingException {
    
            User user = new User(1, "柯神_", "男");
            return new ObjectMapper().writeValueAsString(user);
        }
    
        @RequestMapping("/json1")
        @ResponseBody
        public String json1() throws JsonProcessingException {
    
            User user = new User(1, "柯神_", "男");
            return JsonUtil.getJson(user);
        }
    
    
    
        @RequestMapping("/time1")
        @ResponseBody
        public String jsonT1() throws JsonProcessingException {
            return JsonUtil.getJson(new Date());
        }
    
    
        @RequestMapping("/time2")
        @ResponseBody
        public String jsonT2() throws JsonProcessingException {
            return JsonUtil.getJson(new Date(),"yyyy-MM-dd HH:mm:ss");
        }
    
    
    
    }
    
  4. pojo

    package com.kk.pojo;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        int id;
        String name;
        String sex;
    
        public User(int id, String name, String sex) {
            this.id = id;
            this.name = name;
            this.sex = sex;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", sex='" + sex + '\'' +
                    '}';
        }
    }
    
    

可以将json封装成一个工具类

package com.kk.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 JsonUtil {


    public static String getJson(Object o){
        ObjectMapper mapper = new ObjectMapper();

        try {
            return mapper.writeValueAsString(o);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }



    public static String getJson(Object o, String dataForm){
        ObjectMapper mapper = new ObjectMapper();

        //关闭时间戳
        mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);
        //自定义时间格式

        SimpleDateFormat sdf = new SimpleDateFormat(dataForm);
        mapper.setDateFormat(sdf);
        try {
            return mapper.writeValueAsString(o);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

菜鸟教程: https://www.runoob.com/json/json-tutorial.html

推荐阅读