• 5、SpringMVC:JSON


    什么是JSON:

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

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

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

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

           // 这是一个对象,注意:键名也可以使用引号括起来
            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、在方法的请求映射上面设置编码格式(这种方式如果方法很多的情况下就不便于管理)

    @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=男)

  • 相关阅读:
    Python while循环实现重试
    VBA find查找行号和列号的方法
    通过selenium控制浏览器滚动条
    【转】自然语言处理P,R,F值的计算公式
    【转】ultraedit 正则表达式
    【转】java文件输出流,写到.txt文件,如何实现换行
    Java heap space 解决方法
    XML+RDF——实现Web数据基于语义的描述(转载)
    java学习笔记——jsp简单方法读取txt文本数据
    一个完全独立的今天
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14278282.html
Copyright © 2020-2023  润新知