JSON(初識一)
- 1.簡介
- 1.1概念
- 1.2物件格式
- 1.3語法
- 1.3.1基本規則
- 1.3.2獲取資料
- 2.JSON資料和Java物件的相互轉換
- 2.1Gson
- 2.1.1將物件轉換為JSON字串
- 2.1.2將JSON字串轉換為物件
- 2.2FastJson
- 2.2.1將物件轉換為JSON字串
- 2.2.2將JSON字串轉換為物件
- 2.3JackSon
- 2.3.1 JSON轉為Java物件
- 2.3.2Java物件轉換JSON
1.簡介
JSON: JavaScript Object Notation JS物件簡譜 , 是一種輕量級的資料交換格式.
1.1概念
- 概念: JavaScript Object Notation JavaScript物件表示法
Person p = new Person();
p.setName("張三");
p.setAge(23);
p.setGender("男");
var p = {"name":"張三","age":23,"gender":"男"};
* json現在多用于存盤和交換文本資訊的語法
* 進行資料的傳輸
* JSON 比 XML 更小、更快,更易決議,
1.2物件格式
一本書
書名
簡介
- Java形式
class Book{
private String name;
private String info;
get/set...
}
Book b = new Book();
b.setName(“金蘋果”);
b.setInfo(“種蘋果”);
2.js形式
var b = new Object();
b.name = "金蘋果";
b.info = "種蘋果";
3.XML形式
<book>
<name>金蘋果</name>
<info>種蘋果</info>
</book>
4.JSON形式
{
"name":"金蘋果",
"info":"種蘋果"
}
1.3語法
一個物件, 由一個大括號表示. 括號中 描述物件的屬性 . 通過鍵值對來描述物件的屬性 (可以理解為, 大括號中,包含的是一個個的鍵值對.) 格式: 鍵與值之間使用冒號連接, 多個鍵值對之間使用逗號分隔. 鍵值對的鍵 應使用引號引住(通常Java決議時, 鍵不使用引號會報錯. 而JS能正確解 析.) 鍵值對的值, 可以是JS中的任意型別的資料
1.3.1基本規則
- 資料在名稱/值對中:json資料是由鍵值對構成的
* 鍵用引號(單雙都行)引起來,也可以不使用引號
值得取值型別:
- 數字(整數或浮點數)
- 字串(在雙引號中)
- 邏輯值(true 或 false)
- 陣列(在方括號中) {“persons”:[{},{}]}
- 物件(在花括號中) {“address”:{“province”:“陜西”…}}
- null
* 資料由逗號分隔:多個鍵值對由逗號分隔
* 花括號保存物件:使用{}定義json 格式
* 方括號保存陣列:[]
1.3.2獲取資料
- json物件.鍵名
- json物件[“鍵名”]
- 陣列物件[索引]
- 遍歷
//1.定義基本格式
//1.定義基本格式
var person = {"name": "張三", age: 23, 'gender': true};
var ps = [{"name": "張三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}];
//獲取person物件中所有的鍵和值
//for in 回圈
/* for(var key in person){
//這樣的方式獲取不行,因為相當于 person."name"
//alert(key + ":" + person.key);
alert(key+":"+person[key]);
}*/
//獲取ps中的所有值
for (var i = 0; i < ps.length; i++) {
var p = ps[i];
for(var key in p){
alert(key+":"+p[key]);
}
}
案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//1.定義基本格式
/* var person={"name":"張三",age:23,'gender':true};
for(var i in person){
alert(person[i])
}*/
//獲取name值
//var name=person.name;
/* var name=person["name"];
alert(name);*/
//嵌套格式{}-->[]
var persons1={"persons":[{"name":"張三",age:23,gender:"true"},
{"name":"李四",age:23,gender:"true"},
{"name":"王五",age:23,gender:"false"}
],
"personsq":[{"name":"張三",age:23,gender:"true"},
{"name":"李四",age:23,gender:"true"},
{"name":"王五",age:23,gender:"false"}
]
};
for(var i in persons1){//獲取鍵
var p=persons1[i];//獲取值陣列
alert("gg"+p);
for(var j=0;j<p.length;j++){//遍歷陣列
var o=p[j];//獲取陣列中的物件
for(var s in o) {//獲取陣列中的物件的鍵
alert(o[s]);
}
}
}
/* //拿李四值
var name1=persons.persons[1].name;
alert(name1);*/
//嵌套格式[]-->{}
/*var ps=[{"name":"張三",age:23,gender:"true"},
{"name":"李四",age:23,gender:"true"},
{"name":"王五",age:23,gender:"false"}];
//遍歷
for(var i=0;i<ps.length;i++){
var p=ps[i];
for(var s in p){
alert(p[s])
}
}*/
/*//拿王五值
var name3=ps[2].name;
alert(name3);*/
</script>
</head>
<body>
</body>
</html>
2.JSON資料和Java物件的相互轉換
可以做什么?
- 將Java中的物件 快速的轉換為 JSON格式的字串.
- 將JSON格式的字串, 轉換為Java的物件.
- JSON決議器: * 常見的決議器:Jsonlib,Gson,fastjson,jackson
下面簡單介紹三種實作決議方式
2.1Gson
2.1.1將物件轉換為JSON字串
轉換JSON字串的步驟:
- 引入Gson相關JAR包
- 創建 Gson 的核心物件
Gson gson=new Gson();- 呼叫Gson的相關方法進行轉換
String json = new Gson().toJSON(要轉換的物件);
案例:
(1.創建物體類)
import java.util.Objects;
public class Book {
private String id;
private String name;
private String info;
public Book(){}
public Book(String id, String name, String info) {
this.id = id;
this.name = name;
this.info = info;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", info='" + info + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Book)) return false;
Book book = (Book) o;
return Objects.equals(id, book.id) &&
Objects.equals(name, book.name) &&
Objects.equals(info, book.info);
}
@Override
public int hashCode() {
return Objects.hash(id, name, info);
}
}
(2.實作)
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import java.util.List;
public class Demo {
public static void main(String[] args) {
//Gson 將物件轉換為字符竄 new Gson().toJson(要轉換的物件)
Book book=new Book("1008","金蘋果","一個女孩種植了一棵金蘋果樹");
Gson gson=new Gson();
String s = gson.toJson(book);
System.out.println(s);
System.out.println("======================");
}
}
結果如下:
{"id":"1008","name":"金蘋果","info":"一個女孩種植了一棵金蘋果樹"}
======================
2.1.2將JSON字串轉換為物件
將JSON字串轉換為物件:
- 引入Gson相關JAR包
- 創建 Gson 的核心物件
Gson gson=new Gson();- 呼叫Gson的相關方法進行轉換
物件 = new Gson().fromJson(JSON字串,物件型別.class);
案例:
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import java.util.List;
public class Demo {
public static void main(String[] args) {
// Gson 將Json字符竄 轉換為 物件
Book book1 = gson.fromJson("{\"id\":\"1008\",\"name\":\"金蘋果\",\"info\":\"一個女孩種植了一個金蘋果樹\"}", Book.class);
System.out.println(book1);
}
}
測驗結果如下:
Book{id='1008', name='金蘋果', info='一個女孩種植了一個金蘋果樹'}
2.2FastJson
2.2.1將物件轉換為JSON字串
轉換JSON字串的步驟:
- 引入FastJson相關JAR包
- 在需要轉換JSON字串的位置撰寫如下代碼即可:
- String json=JSON.toJSONString(要轉換的物件);
案例:
(1.創建物體類)
import java.util.Objects;
public class Book {
private String id;
private String name;
private String info;
public Book(){}
public Book(String id, String name, String info) {
this.id = id;
this.name = name;
this.info = info;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", info='" + info + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Book)) return false;
Book book = (Book) o;
return Objects.equals(id, book.id) &&
Objects.equals(name, book.name) &&
Objects.equals(info, book.info);
}
@Override
public int hashCode() {
return Objects.hash(id, name, info);
}
}
(2.實作)
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import java.util.List;
public class Demo {
public static void main(String[] args) {
//JSon.toJsonString(要轉換的物件)
String s1 = JSON.toJSONString(book);
System.out.println(s1);
}
}
結果如下:
{"id":"1008","name":"金蘋果","info":"一個女孩種植了一棵金蘋果樹"}
======================
2.2.2將JSON字串轉換為物件
將JSON字串轉換為物件:
- 引入FastJson相關JAR包
- 在需要轉換JSON字串的位置撰寫如下代碼即可:
- 型別 物件名=JSON.parseObject(JSON字串, 型別.class);
或
List<型別> list=JSON.parseArray(JSON字串,型別.class);
案例:
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import java.util.List;
public class Demo {
public static void main(String[] args) {
//FastJson 將Json字符轉換為物件 parseObject()
Book book2 = JSON.parseObject("{\"id\":\"1008\",\"info\":\"一個女孩種植了一棵金蘋果樹\",\"name\":\"金蘋果\"}", Book.class);
System.out.println(book2);
List<String> strings = JSON.parseArray("[\"123\",\"456\",\"789\"]", String.class);
System.out.println(strings);
}
}
測驗結果如下:
Book{id='1008', name='金蘋果', info='一個女孩種植了一棵金蘋果樹'}
[123, 456, 789]
2.3JackSon
2.3.1 JSON轉為Java物件
1. 匯入jackson的相關jar包
2. 創建Jackson核心物件 ObjectMapper
3. 呼叫ObjectMapper的相關方法進行轉換
readValue(json字串資料,Class)
案例:
(1.物體類)
注解:
1. @JsonIgnore:排除屬性,
2. @JsonFormat:屬性值得格式化
* @JsonFormat(pattern = “yyyy-MM-dd”)
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.Date;
import java.util.Objects;
public class Person {
private String name;
private int age;
private String gender;
//@JsonIgnore//忽略該屬性
@JsonFormat(pattern="yyyy-MM-dd")
private Date birthday;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", birthday=" + birthday +
'}';
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
return getAge() == person.getAge() &&
Objects.equals(getName(), person.getName()) &&
Objects.equals(getGender(), person.getGender()) &&
Objects.equals(getBirthday(), person.getBirthday());
}
@Override
public int hashCode() {
return Objects.hash(getName(), getAge(), getGender(), getBirthday());
}
}
@Test
public void Test5() throws IOException {
//1.初始化JSON字串
String json="{\"name\":\"張三\",\"age\":23,\"gender\":\"男\"}";
String s= "{\"gender\":\"男\",\"name\":\"張三\",\"age\":23}";
//2.創建ObjectMapper物件
ObjectMapper mapper=new ObjectMapper();
//轉換為java物件 Person物件
Person person = mapper.readValue(json,Person.class);
System.out.println(person);
}
測驗結果如下:
Person{name='張三', age=23, gender='男', birthday=null}
2.3.2Java物件轉換JSON
- 匯入jackson的相關jar包
- 創建Jackson核心物件 ObjectMapper
- 呼叫ObjectMapper的相關方法進行轉換
- 轉換方法:
- writeValue(引數1,obj):
引數1:
File:將obj物件轉換為JSON字串,并保存到指定的檔案中
Writer:將obj物件轉換為JSON字串,并將json資料填充到字符輸出流中
OutputStream:將obj物件轉換為JSON字串,并將json資料填充到位元組輸出流中- writeValueAsString(obj):將物件轉為json字串
** writeValue(引數1,obj):案例一:**
@Test
public void Test1() throws IOException {
//1.創建Person物件
Person p=new Person();
p.setAge(18);
p.setGender("男");
p.setName("張三");
//2.創建Jackson核心物件 ObjectMapper
ObjectMapper mapper=new ObjectMapper();
//3.轉換
//轉換方法
/*mapper.writeValue(引數1,obj);
引數1:
File:將obj物件轉換為JSON字串,并保存到指定的檔案中
Writer:將obj物件轉換為JSON字串,并將JSON資料填充到字符輸出流中
OutputStream:將obj物件轉換位JSON字串,并將JSON資料填充到字符輸出流中
writeValueAsString():將物件轉換為JSON字串
* */
String json = mapper.writeValueAsString(p);
// System.out.println(json);//{"name":"張三","age":18,"gender":"男"}
//將資料寫到e://jon.txt檔案中
mapper.writeValue(new File("e://jon.txt"),p);
//將資料關聯到e://jon1.txt檔案中
mapper.writeValue(new FileWriter("E://jons1.txt"),p);
}
測驗結果如下:


writeValueAsString(obj)案例二:
@Test
public void Test2() throws JsonProcessingException {
//1.創建Person物件
Person p=new Person();
p.setAge(18);
p.setGender("男");
p.setName("張三");
p.setBirthday(new Date());
//2.創建Jackson核心物件 ObjectMapper
ObjectMapper mapper=new ObjectMapper();
//3.轉換
//轉換方法
/*mapper.writeValue(引數1,obj);
引數1:
File:將obj物件轉換為JSON字串,并保存到指定的檔案中
Writer:將obj物件轉換為JSON字串,并將JSON資料填充到字符輸出流中
OutputStream:將obj物件轉換位JSON字串,并將JSON資料填充到字符輸出流中
writeValueAsString():將物件轉換為JSON字串
* */
String json = mapper.writeValueAsString(p);
System.out.println(json);//{"name":"張三","age":18,"gender":"男","birthday":"2020-06-10"}
}
測驗結果如下:
{"name":"張三","age":18,"gender":"男","birthday":"2021-03-07"}
集合轉換案例三(List):
@Test
public void Test3() throws JsonProcessingException {
//1.創建Person物件
Person p=new Person();
p.setAge(18);
p.setGender("男");
p.setName("張三");
p.setBirthday(new Date());
Person p2=new Person();
p2.setAge(18);
p2.setGender("男");
p2.setName("張三");
p2.setBirthday(new Date());
Person p3=new Person();
p3.setAge(18);
p3.setGender("男");
p3.setName("張三");
p3.setBirthday(new Date());
List<Person>list=new ArrayList<Person>();
list.add(p);
list.add(p2);
list.add(p3);
//2.創建Jackson核心物件 ObjectMapper
ObjectMapper mapper=new ObjectMapper();
//3.轉換
//轉換方法
/*mapper.writeValue(引數1,obj);
引數1:
File:將obj物件轉換為JSON字串,并保存到指定的檔案中
Writer:將obj物件轉換為JSON字串,并將JSON資料填充到字符輸出流中
OutputStream:將obj物件轉換位JSON字串,并將JSON資料填充到字符輸出流中
writeValueAsString():將物件轉換為JSON字串
* */
String json = mapper.writeValueAsString(list);
System.out.println(json);
// [{"name":"張三","age":18,"gender":"男","birthday":"2020-06-10"},
// {"name":"張三","age":18,"gender":"男","birthday":"2020-06-10"},
// {"name":"張三","age":18,"gender":"男","birthday":"2020-06-10"}]
}
測驗結果如下:
[{"name":"張三","age":18,"gender":"男","birthday":"2021-03-07"},{"name":"張三","age":18,"gender":"男","birthday":"2021-03-07"},{"name":"張三","age":18,"gender":"男","birthday":"2021-03-07"}]
集合轉換案例三(Map):
@Test
public void Test4() throws JsonProcessingException {
Map<String,Object> map=new HashMap<String,Object>();
map.put("name","張三");
map.put("age",23);
map.put("gender","男");
ObjectMapper mapper=new ObjectMapper();
String s = mapper.writeValueAsString(map);
System.out.println(s);//{"gender":"男","name":"張三","age":23}
}
測驗結果如下:
{"gender":"男","name":"張三","age":23}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/267363.html
標籤:java
