天天看點

【SpringMVC】JSON字元串

文章目錄

    • 一、什麼JSON
    • 二、在前端js對象與JSON的互相轉換
    • 三、SpringMVC中解決JSON字元串亂碼問題(固定代碼)
    • 四、通過Jackson将java對象轉換成json字元串
        • 1. 将普通對象轉化JSON
        • 2. 将時間類(Date)轉換成JSON
        • 3. 封裝成工具類
    • 五、通過FastJson将java對象轉換成json字元串
        • 常用方法
        • 1. 将普通java對象轉換成JSON
        • 2. 将時間類(Date)轉換成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() 方法:

要實作從JS對象轉換為JSON字元串,使用 JSON.stringify() 方法:

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

三、SpringMVC中解決JSON字元串亂碼問題(固定代碼)

下圖就是json字元串亂碼

【SpringMVC】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的亂碼問題

【SpringMVC】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字元串

【SpringMVC】JSON字元串

2. 将時間類(Date)轉換成JSON

第一步:将設定"列印時間為時間戳"的預設置為false

第二步:設定列印日期的格式

第三步:傳遞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));
    }
           
【SpringMVC】JSON字元串
@RequestMapping("/json/t4")
    @ResponseBody
    public String test04(){
        return JackUtil.toJsonStr(new Date(),"yyyy-MM-dd HH:mm");
    }
           
【SpringMVC】JSON字元串

五、通過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);
    }
           
【SpringMVC】JSON字元串

2. 将時間類(Date)轉換成JSON

代碼:

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