編程代碼
新聞詳情

JSON基礎知識

發布時(shí)間:2021-05-18 08:24:14 浏覽次數:3066

JSON概念

JSON全名稱是(shì)JavaScript Object Notation,即JavaScript對象表示法。

Java的(de)對象表示:

Person p = new Person();

p.setName("張三");

p.setAge(23);

p.setGender("男");

JavaScript的(de)對象表示:

var p = {"name":"張三","age":23,"gender":"男"};

JSON介紹:

  • json現在(zài)多用于(yú)存儲和(hé / huò)交換文本信息的(de)語法
  • 進行數據的(de)傳輸
  • JSON 比 XML 更小、更快,更易解析。

JSON語法

JSON語法基本規則

1、數據在(zài)鍵/值對中:JSON數據由鍵值對構成。

  • 鍵可以(yǐ)用引号(單雙引号都行)引起來(lái),也(yě)可以(yǐ)不(bù)使用引号引起來(lái)。
  • 值的(de)取值類型有:數字(整數或浮點數)、字符串(用雙引号引起來(lái))、布爾值(true或false)、數組(在(zài)方括号中)、對象(在(zài)花括号中)、null。

# 值是(shì)數字類型

{age: 10, score: 78.5}

# 值是(shì)字符串類型

{name: "張三", sex: "m"}

# 值是(shì)布爾值類型

{flag: true}

# 值是(shì)數組類型

{names: ["zhangsan", "lisi", "wangwu"]}

{students: [{name: "zhangsan"}, {name: "lisi"}]}

# 值是(shì)對象類型

{student: {name: "zhangsan", age: 18, flag: true}}

# 值是(shì)null類型

{value: null}

2、數據由逗号分隔:多個(gè)鍵值對用逗号進行分隔

{key1: value1, key2: value2, key3: value3, ...}

3、花括号保存對象:使用{}定義json格式的(de)對象,又可以(yǐ)嵌套其他(tā)數據類型的(de)值。

{student: {name: "zhangsan", hobbies: ["play", "read", "listen"]}}

4、方括号保存數組:[1,2,3,4,5],又可以(yǐ)嵌套其他(tā)數據類型的(de)值。

[{name1:"zhangsan"},{name2:"lisi"}]

[1,2,3,4,5,6]

讀取JSON數據

讀取通常是(shì)指在(zài)前端使用JavaScript讀取JSON格式數據,後端Java不(bù)采用此語法:

# 讀取對象類型中指定鍵的(de)值

json對象.鍵名

json對象["鍵名"]

# 讀取JSON數組中的(de)值

數組對象[索引]

# 遍曆對象

for (鍵名 in 對象) {

# key爲(wéi / wèi)鍵名;對象[key]爲(wéi / wèi)鍵值

}

# 遍曆數組

for (var i=0; i<數組.length; i++) {

# 數組[i]獲取數組的(de)值

}

實例:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>json遍曆</title>

</head>

<body>

<script>

// 遍曆對象

// 鍵名可以(yǐ)不(bù)加引号,也(yě)可以(yǐ)加單引号或雙引号

var person1 = {name: "張三", age: 23, sex: "m"};

var person2 = {"name": "張三", "age": 23, "sex": "m"};

var person3 = {'name': "張三", 'age': 23, 'sex': "m"};

// 獲取person對象中所有的(de)鍵和(hé / huò)值

// for in 循環

for (key in person1) {

// 無法使用person1.key,因爲(wéi / wèi)這(zhè)樣相當于(yú)person1."name"

console.log(key, person1[key]);

}


// 遍曆普通數組

var arr=["唐僧","孫悟空","豬八戒","沙僧"];

for (var i=0; i < arr.length; i++)

{

console.log(arr[i]);

}


// 遍曆對象數組

var ps = [{"name": "張三", "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>

JSON數據與Java數據的(de)相互轉換

概述

要(yào / yāo)想實現JSON數據與Java數據的(de)相互轉換,需要(yào / yāo)JSON解析器,即能夠解析JSON格式數據的(de)jar包。

常見的(de)解析器:Jsonlib,Gson,fastjson,jackson。

本節中使用jackson,因爲(wéi / wèi)spring内置它,爲(wéi / wèi)以(yǐ)後打下基礎。

JSON轉爲(wéi / wèi)Java對象

将JSON轉換爲(wéi / wèi)Java對象的(de)步驟如下:

1. 導入jackson的(de)相關jar包

2. 創建Jackson核心對象 ObjectMapper

3. 調用ObjectMapper的(de)相關方法進行轉換:readValue(json字符串數據, Class)

第一(yī / yì /yí)步:導入相關jar包(注意,版本一(yī / yì /yí)定要(yào / yāo)匹配,三個(gè)版本應該一(yī / yì /yí)緻,否則可能發生異常)

尴尬!看完京東大(dà)佬的(de)這(zhè)份JSON手冊,才知道(dào)自己是(shì)井底之(zhī)蛙

第二步:轉換對象

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;

}


在(zài)線客服 雙翌客服
客服電話
  • 0755-23712116
  • 13310869691