5、SpringMVC:JSON

 


什么是JSON:

  • JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式,目前使用特别广
  • 采用完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁和清晰的层次结构使得JSON成为理想的数据交换语言。
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

 

JSON键值对是用来保存JavaScript对象的一种方式,和JavaScript对象的写法也大同小异,
键/值对组合中的键名写在前面并用双引号""包裹,使用冒号:分隔,然后紧接着值:

    {"anme":"张志喜"}
    {"age":"21"}
    {"sex":"男"}

 

JSON是JavaScript对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字
符串。

1
2
3
4
// 这是一个对象,注意:键名也可以使用引号括起来
 var obj = {a :"张三", b:"李四"}
 // 这是一个json字符串,本质上是一个字符串
 var json = '{"a":"张三", b :"李四"}'

 

JavaScript中JSON对象跟JSON字符串的互相转换:

复制代码
<script type="text/javascript">
    var user = {
        "name": "张志喜",
        "age": "21",
        "sex": "男"
    };

    // 对象转JSON字符串
    let jsonStr = JSON.stringify(user);
    // {"name":"张志喜","age":"21","sex":"男"}
    console.log(jsonStr);

    // JSON字符串转对象
    let jsonObj = JSON.parse(jsonStr);
    console.log(jsonObj);
</script>
复制代码

 

jackson-databind的使用:

1、导入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.1</version>
</dependency>

2、在springmvc.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>
复制代码

3、创建对象映射器,将对象转为JSON格式字符串

复制代码
@RestController
public class JsonDemo {

    @RequestMapping(value = "/json")
    @ResponseBody // 表示不会走视图解析器,会直接返回一个字符串到页面
    public String json1(ServletResponse response) throws IOException {
        // 创建对象映射器
        ObjectMapper mapper = new ObjectMapper();
        List<User> list = new ArrayList<User>();
        // 创建一个对象
        User user1 = new User("张志喜1", 21, "男");
        User user2 = new User("张志喜2", 21, "男");
        User user3 = new User("张志喜3", 21, "男");
        User user4 = new User("张志喜4", 21, "男");
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);

        // 返回[将对象转为JSON格式字符串]
        return mapper.writeValueAsString(list);
    }
}
复制代码

4、测试结果

 

 

 

END:解决输出到网页的中文乱码问题:

1、在方法的请求映射上面设置编码格式(这种方式如果方法很多的情况下就不便于管理)

1
@RequestMapping(value = "/j1", produces = "application/json;charset=utf-8")

2、在springmvc的配置文件进行配置:【注意在导入新的jar包要更新项目的lib目录,否则会报500错误】

复制代码
    <!--解决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>
复制代码

 

阿里巴巴的firstjson使用:

1、导入maven依赖:

        <!--阿里巴巴的JSON格式转换-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>

2、配置乱码问题

3、JSON对象、JSON字符串、java对象的互转:

复制代码
    @Test
    public void test1(){
        User user = new User("张志喜", 21, "男");

        // java对象转为JSON格式字符串
        String str = JSON.toJSONString(user);
        System.out.println("java对象-->JSON字符串" + str);

        // java对象转为JSON对象
        JSON toJSON = (JSON) JSON.toJSON(user);
        System.out.println("java对象-->JSON对象" + toJSON.toString());

        // JSON字符串转java对象
        User user1 = JSON.parseObject(str, User.class);
        System.out.println("JSON字符串-->Java对象" + user1.toString());

        // JSON对象转Java对象
        User user2 = JSON.toJavaObject(toJSON, User.class);
        System.out.println("JSON对象-->Java对象"+user2.toString());
    }
复制代码

输出结果:  

java对象-->JSON字符串{"age":21,"name":"张志喜","sex":"男"}
java对象-->JSON对象{"sex":"男","name":"张志喜","age":21}
JSON字符串-->Java对象User(name=张志喜, age=21, sex=男)
JSON对象-->Java对象User(name=张志喜, age=21, sex=男)

posted @   Java小白的搬砖路  阅读(136)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示