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

原文地址:https://www.cnblogs.com/zhangzhixi/p/14278282.html