【SpringMVC】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() 方法:

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

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

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

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



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

下图就是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的乱码问题
在这里插入图片描述


四、通过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字符串
在这里插入图片描述


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

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

jaskson.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);

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

jaskson.setDateFormat(new SimpleDateFormat(dateForm));

第三步:传递Date对象

jaskson.writeValueAsString(new 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));
    }

在这里插入图片描述


    @RequestMapping("/json/t4")
    @ResponseBody
    public String test04(){
        return JackUtil.toJsonStr(new Date(),"yyyy-MM-dd HH:mm");
    }

在这里插入图片描述



五、通过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);
    }

在这里插入图片描述

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

代码:

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

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值