文章目錄
-
- 一、什麼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的表達形式:
- JSON值是由鍵值對組成的,其中鍵中的字面值中的英文必須使用小寫。
- 鍵和值之間通過英文的“:”分隔,鍵值對之間使用英文的“,”分隔。
- 值可以使用對象、數組、數字、字元串。
如:{“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-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的亂碼問題
四、通過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字元串
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));
}
@RequestMapping("/json/t4")
@ResponseBody
public String test04(){
return JackUtil.toJsonStr(new Date(),"yyyy-MM-dd HH:mm");
}
五、通過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);
}
2. 将時間類(Date)轉換成JSON
代碼:
@RequestMapping("/json/j2")
@ResponseBody
public String test02(){
return JSON.toJSONStringWithDateFormat(new Date(),"yyyy-MM-dd HH");
}