SpringMVC(二)——>JSON

一、JSON

  JSON(JavaScript Object Notation, JS 对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。
  采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。在这里插入图片描述
在 js 语言中,一切都是对象,因此任何支持 JS 支持的类型都可以通过 JSON 来表示。他们的要求和语法格式有一下几条:

  • 对象表示为键值对
  • 数据由逗号分隔
  • { } 花括号表示对象
  • [ ] 方括号保存数组

JSON 键值对 是用来保存 JS 对象的一种方式,和JS 对象的写法也大同小异,格式为:{"属性名" : "值"}

{"name": "lixuechen"}
{"age" : "18"}
{"sex" : "男"}

我们可以把JSON 理解为是 JS 对象的字符串表示形式

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
1、JSON 和 JS 对象互转

JSON 和 JS 互相转换,主要用到一下两个方法

方法描述
JSON.parse()JSON字符串转换为JS对象
JSON.stringify()JS对象转换为JSON字符串

格式如下:

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

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

使用实例进行测试一下,创建一个 html ,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON_十八</title>
</head>
<body>

<script type="text/javascript">
    //编写一个js的对象
    var user = {
        name: "李十八",
        age: 18,
        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>

然后使用浏览器打开这个 html 网页,摁 F12 去控制台看一下输出信息,运行结果如下:

在这里插入图片描述


2、使用 Controller 实现返回 JSON 数据

在这我们就需要 Jackson 工具对 json 进行解析,所有我们要导入 Jackson 的 jar 包

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

  然后写一个实体类,然后我们去编写我们的测试 Controller 。在这我们需要知道@ResponseBodyObjectMapper对象 。

  其中注解 @ResponseBody 就是把后台的对象转换成json对象,返回到页面;和它对应的有一个是@RequestBody一般用来负责接收前台的json数据,把 json 数据自动封装到实体类中。

  ObjectMapper 对象则是用来创建一个 jackson 的对象映射器,用来解析数据。有了这两个东西我们就能使用 Controller 实现返回 JSON 数据。

  为了防止出现乱码,我们可以在 Spring 的配置文件中加入如下代码:

<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>

Controllor 进行测试

package com.lxc.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lxc.pojo.User;
import com.lxc.utils.JsonuUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;


@Controller
public class UserContraller<controller> {
    @RequestMapping("/json1")
    @ResponseBody
    public String json1() throws JsonProcessingException {
        //创建 Jackson 的对象映射器,来解析数据
        ObjectMapper objectMapper = new ObjectMapper();
        User user = new User("李雪晨", 18, "男");
        String str = objectMapper.writeValueAsString(user);
        return str;
    }
}

运行结果如下:
在这里插入图片描述
在测试方法中加入一个集合进行测试:

  @RequestMapping("/json3")
    @ResponseBody
    public String json3() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        List<User> list = new ArrayList<>();
        User user1 = new User("李某人", 18, "男");
        User user2 = new User("张三", 18, "男");
        User user3 = new User("王五", 18, "男");
        list.add(user1);
        list.add(user2);
        list.add(user3);
        String str = mapper.writeValueAsString(list);
        return str;
    }

测试结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值