熱線電(dian)話(hua):0755-23712116
郵箱:contact@legoupos.cn
地址:深圳(zhen)市(shi)寶安區沙井街道后亭(ting)茅洲(zhou)山工業(ye)園工業(ye)大廈全至科(ke)技創(chuang)(chuang)新園科(ke)創(chuang)(chuang)大廈2層2A
JSON全名稱是JavaScript Object Notation,即JavaScript對(dui)象(xiang)表示(shi)法。
Java的對象表示:
Person p = new Person();
p.setName("張三(san)");
p.setAge(23);
p.setGender("男");
JavaScript的對象表示:
var p = {"name":"張(zhang)三","age":23,"gender":"男"};
JSON介紹:
JSON語法基本規(gui)則(ze)
1、數據在鍵(jian)/值(zhi)對(dui)中:JSON數據由鍵(jian)值(zhi)對(dui)構成(cheng)。
# 值是數字類型
{age: 10, score: 78.5}
# 值是字符串類型
{name: "張(zhang)三", sex: "m"}
# 值是布爾值類型
{flag: true}
# 值是數組類型
{names: ["zhangsan", "lisi", "wangwu"]}
{students: [{name: "zhangsan"}, {name: "lisi"}]}
# 值是對象類型
{student: {name: "zhangsan", age: 18, flag: true}}
# 值是null類型
{value: null}
2、數據(ju)由(you)逗號分(fen)(fen)隔:多個鍵值(zhi)對用逗號進行分(fen)(fen)隔
{key1: value1, key2: value2, key3: value3, ...}
3、花括號保存(cun)對象:使(shi)用{}定(ding)義json格(ge)式的對象,又(you)可以(yi)嵌套(tao)其他數據類型的值(zhi)。
{student: {name: "zhangsan", hobbies: ["play", "read", "listen"]}}
4、方括號(hao)保存數組:[1,2,3,4,5],又可(ke)以嵌套其他數據類(lei)型的值。
[{name1:"zhangsan"},{name2:"lisi"}]
[1,2,3,4,5,6]
讀取JSON數據
讀取通常是指在前端(duan)使用(yong)JavaScript讀取JSON格式(shi)數據(ju),后(hou)端(duan)Java不(bu)采用(yong)此語法:
# 讀取對象類型中指定(ding)鍵(jian)的值(zhi)
json對象.鍵名
json對象["鍵(jian)名"]
# 讀取JSON數(shu)組中的值
數組對象[索引]
# 遍歷對象
for (鍵名 in 對象) {
# key為(wei)(wei)鍵名;對象(xiang)[key]為(wei)(wei)鍵值(zhi)
}
# 遍歷數組
for (var i=0; i<數組.length; i++) {
# 數(shu)(shu)組[i]獲取數(shu)(shu)組的(de)值
}
實例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>json遍歷</title>
</head>
<body>
<script>
// 遍歷對象
// 鍵(jian)名可以不加(jia)引號,也可以加(jia)單(dan)引號或雙(shuang)引號
var person1 = {name: "張三", age: 23, sex: "m"};
var person2 = {"name": "張三", "age": 23, "sex": "m"};
var person3 = {'name': "張三(san)", 'age': 23, 'sex': "m"};
// 獲取person對象中所有(you)的(de)鍵和值(zhi)
// for in 循環
for (key in person1) {
// 無法使用(yong)person1.key,因為這樣相當于person1."name"
console.log(key, person1[key]);
}
// 遍歷普通數組
var arr=["唐僧","孫(sun)悟(wu)空","豬八戒","沙僧"];
for (var i=0; i < arr.length; i++)
{
console.log(arr[i]);
}
// 遍歷對象數組
var ps = [{"name": "張(zhang)三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}];
for (var i = 0; i < ps.length; i++) {
var p = ps[i];
for (key in p) {
console.log(key + ":" + p[key]);
}
}
</script>
</body>
</html>
概(gai)述
要想實現JSON數據與Java數據的相互轉換,需要JSON解(jie)析器(qi),即能夠解(jie)析JSON格(ge)式(shi)數據的jar包。
常見的解析器:Jsonlib,Gson,fastjson,jackson。
本節中使(shi)用jackson,因為spring內(nei)置它,為以(yi)后打(da)下(xia)基礎。
JSON轉為Java對(dui)象(xiang)
將JSON轉換為Java對象的步驟如下:
1. 導(dao)入jackson的相關jar包
2. 創(chuang)建Jackson核(he)心(xin)對象 ObjectMapper
3. 調(diao)用ObjectMapper的相關方法進行(xing)轉換:readValue(json字符(fu)串數據, Class)
第一(yi)步:導入相關jar包(注意,版(ban)本(ben)一(yi)定要匹配,三個版(ban)本(ben)應該一(yi)致,否則可能發生異常(chang))
第二步:轉(zhuan)換(huan)對象
public class Json2Java {
public static void main(String[] args) throws IOException {
ObjectMapper mapper=new ObjectMapper();
String json="{\"username\":\"李四\",\"password\":\"123456\"}";
User user = mapper.readValue(json, User.class);
System.out.println(user);
}
}
class User{
private String username;
private String password;
public User() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}