天天看点

【SpringMVC】JSON字符串

文章目录

    • 一、什么JSON
    • 二、在前端js对象与JSON的相互转换
    • 三、SpringMVC中解决JSON字符串乱码问题(固定代码)
    • 四、通过Jackson将java对象转换成json字符串
        • 1. 将普通对象转化JSON
        • 2. 将时间类(Date)转换成JSON
        • 3. 封装成工具类
    • 五、通过FastJson将java对象转换成json字符串
        • 常用方法
        • 1. 将普通java对象转换成JSON
        • 2. 将时间类(Date)转换成JSON

一、什么JSON

     JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON的表达形式:

  1. JSON值是由键值对组成的,其中键中的字面值中的英文必须使用小写。
  2. 键和值之间通过英文的“:”分隔,键值对之间使用英文的“,”分隔。
  3. 值可以使用对象、数组、数字、字符串。

如:{“name”: “John Doe”, “age”: 18, “address”: {“country” : “china”, “zip-code”: “10000”}}

二、在前端js对象与JSON的相互转换

要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法:

要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法:

注意:JSON是javascript中内置的对象

三、SpringMVC中解决JSON字符串乱码问题(固定代码)

下图就是json字符串乱码

【SpringMVC】JSON字符串

在SpringMVC中给我们提供了一步式解决所有JSON乱码的方案,如下:

springmvc-servlet.xml:

<!--解决json 乱码配置-->
    <mvc:annotation-driven>
        <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>
           

这样,我们就成功的解决了JSON的乱码问题

【SpringMVC】JSON字符串

四、通过Jackson将java对象转换成json字符串

jackson的maven依赖

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>

           

1. 将普通对象转化JSON

介绍一个注解

@ResponseBody:这个注解的作用是是这个请求不走视图解析器,直接返回给前端String

介绍一个类

ObjectMapper:其中有一个writeValueAsString(Object o)方法,其作用就是将对象转换成JSON。

代码:

@RequestMapping("/json/t1")
    @ResponseBody //这个注解的作用是是这个请求不走视图解析器,直接返回给前端String
    public String test01(){
        ObjectMapper jaskson = new ObjectMapper();

        ArrayList<User> list = new ArrayList();

        User user01 = new User("寒江coder01", 18);
        User user02 = new User("寒江coder02", 18);
        User user03 = new User("寒江coder03", 18);

        list.add(user01);
        list.add(user02);
        list.add(user03);

        try {
            return jaskson.writeValueAsString(list);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        return null;
    }
           

请求结果的返回值就是JSON字符串

【SpringMVC】JSON字符串

2. 将时间类(Date)转换成JSON

第一步:将设置"打印时间为时间戳"的默认置为false

第二步:设置打印日期的格式

第三步:传递Date对象

代码:

@RequestMapping("/json/t2")
    @ResponseBody
    public String test02(){
        ObjectMapper jaskson = new ObjectMapper();

		//将设置"打印时间为时间戳"的默认置为false
        jaskson.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
		
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		//设置打印日期的格式
        jaskson.setDateFormat(sdf);

        Date date = new Date();

        try {
        	//传递Date对象
            return jaskson.writeValueAsString(date);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        return null;

    }
           

3. 封装成工具类

源码:

public class JackUtil {

    public static String toJsonStr(Object o){
        return toJsonStr(o,"yyyy-MM-dd HH:mm:ss");
    }

    public static String toJsonStr(Object o,String dateForm){
        ObjectMapper jaskson = new ObjectMapper();

        //将设置"打印时间为时间戳"的默认置为false
        jaskson.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);

        //设置打印日期的格式
        jaskson.setDateFormat(new SimpleDateFormat(dateForm));

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

}

           

测试:

@RequestMapping("/json/t3")
    @ResponseBody
    public String test03(){
        return JackUtil.toJsonStr(new User("寒江coder01", 15));
    }
           
【SpringMVC】JSON字符串
@RequestMapping("/json/t4")
    @ResponseBody
    public String test04(){
        return JackUtil.toJsonStr(new Date(),"yyyy-MM-dd HH:mm");
    }
           
【SpringMVC】JSON字符串

五、通过FastJson将java对象转换成json字符串

FastJson的maven依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.76</version>
</dependency>
           

FastJson的使用非常简单,我们需要会使用JSON类。它是阿里巴巴的作品。

常用方法

toJSONString(Object o):将普通java对象转换成JSON字符串。

toJSONStringWithDateFormat(Date date, “yyyy-MM-dd HH:mm:ss”):将java的Date对象格式化成转换成JSON字符串。

parseObject(String json, Xxx.class):将JSON字符串转化成java对象

toJavaObject(String json, Xxx.class):将JSON字符串转化成java对象

1. 将普通java对象转换成JSON

代码:

@RequestMapping("/json/j1")
    @ResponseBody
    public String test01(){
        ArrayList<User> list = new ArrayList() ;
        list.add(new User("寒江Coder",22));
        list.add(new User("寒江Coder",22));
        list.add(new User("寒江Coder",22));

        return JSON.toJSONString(list);
    }
           
【SpringMVC】JSON字符串

2. 将时间类(Date)转换成JSON

代码:

@RequestMapping("/json/j2")
    @ResponseBody
    public String test02(){
        return JSON.toJSONStringWithDateFormat(new Date(),"yyyy-MM-dd HH");
    }
           
【SpringMVC】JSON字符串