概念
JSON:JavaScript 對象表示法(JavaScript Object Notation)。
JSON一種數據格式。它本身是一串字符串,只是它有固定格式的字符串,符合這個數據格式要求的字符串,我們稱之爲JSON。
user包含 3 個用戶(對象),數組中每個對象表示了姓名和年齡:
var user = [
{ "name": "張三", "age": 26 },
{ "name": "李四", "age": 29 },
{ "name": "王五", "age": 31 }
]
作用
java可以使用對象對一些屬性進行封裝。而JSON是在JavaScript中存儲和交換文本信息的語法,類似 XML。但是它比 XML 更小、更快,更易解析。
語法規則
- 數據在名稱/值對中:json數據是由鍵值對構成的,鍵用引號(單雙都行)引起來,也可以不使用引號
- 數據由逗號分隔:多個鍵值對由逗號分隔
- 花括號保存對象
- 方括號保存數組
數據的書寫格式是:{Key:Value}
、{Key:Array}
例如:
{"name" : "張三"}
值的範圍:
- 數字(整數或浮點數)
- 字符串(在雙引號中)
- 邏輯值(
true
或false
) - 數組(在方括號中)
- 對象(在花括號中)
null
獲取數據:
1. JSON對象.鍵名
var myObj, x;
myObj = { "name":"runoob", "alexa":10000, "site":null };
x = myObj["name"];
2. JSON對象["鍵"]
var myObj, x;
myObj = { "name":"runoob", "alexa":10000, "site":null };
x = myObj["name"];
嵌套 JSON 對象
JSON 對象中可以包含另外一個 JSON 對象:
myObj = {
"name":"runoob",
"alexa":10000,
"sites": {
"site1":"www.baidu.com",
"site2":"m.taobao.com",
"site3":"c.csdn.net"
}
}
可以使用點號(.)或者中括號([])來訪問嵌套的 JSON 對象。
x = myObj.sites.site2;
// 或者
x = myObj.sites["site1"];
JSON數據和Java對象的相互轉換
1. Java轉換爲JSON對象(常用)
用jackson解析器實現,步驟如下:
- 導入jackson的相關jar包
- 創建Jackson核心對象 ObjectMapper
- 調用ObjectMapper的相關方法進行轉換
轉換方法:
1. writeValue(參數1,obj):
參數1可以是以下幾種:
File:將obj對象轉換爲JSON字符串,並保存到指定的文件中
Writer:將obj對象轉換爲JSON字符串,並將json數據填充到字符輸出流中
OutputStream:將obj對象轉換爲JSON字符串,並將json數據填充到字節輸出流中
//Java對象轉爲JSON字符串
//1.創建Person對象
Person p = new Person();
p.setName("張三");
p.setAge(23);
p.setGender("男");
//2.創建Jackson的核心對象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//3.writeValue方法將對象傳入轉換到文件中
String json = mapper.writeValue(new File("d://a.txt"),p);
2. writeValueAsString(obj):將對象轉爲json字符串
//Java對象轉爲JSON字符串
//1.創建Person對象
Person p = new Person();
p.setName("張三");
p.setAge(23);
p.setGender("男");
//2.創建Jackson的核心對象 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
//3.writeValueAsString方法將對象傳入轉換爲json
String json = mapper.writeValueAsString(p);
System.out.println(json); //{"name":"張三","age":23,"gender":"男"}
註解:
1. @JsonIgnore:排除屬性。
2. @JsonFormat:屬性值的格式化
例如: @JsonFormat(pattern = "yyyy-MM-dd")
複雜的java對象轉換
1. List:數組
2. Map:對象格式一致
依舊使用上面的方法,不過傳入方法內的參數不再是一個原來的對象,而是集合
2. JSON轉換爲Java對象
1. 導入jackson的相關jar包
2. 創建Jackson核心對象 ObjectMapper
3. 調用ObjectMapper的相關方法進行轉換
readValue(json字符串數據,Class)