Groovy - JSON
Chương này trình bày cách chúng ta có thể sử dụng ngôn ngữ Groovy để phân tích cú pháp và tạo các đối tượng JSON.
Các hàm JSON
Sr.No | Chức năng & Thư viện |
---|---|
1 | JsonSlurper JsonSlurper là một lớp phân tích văn bản JSON hoặc nội dung trình đọc thành dữ liệu Groovy Các cấu trúc như bản đồ, danh sách và các kiểu nguyên thủy như Integer, Double, Boolean và String. |
2 | JsonOutput Phương thức này chịu trách nhiệm tuần tự các đối tượng Groovy thành chuỗi JSON. |
Phân tích cú pháp dữ liệu bằng JsonSlurper
JsonSlurper là một lớp phân tích văn bản JSON hoặc nội dung trình đọc thành các Cấu trúc dữ liệu Groovy như bản đồ, danh sách và các kiểu nguyên thủy như Integer, Double, Boolean và String.
Cú pháp
def slurper = new JsonSlurper()
JSON slurper phân tích cú pháp văn bản hoặc nội dung trình đọc thành cấu trúc dữ liệu của danh sách và bản đồ.
Lớp JsonSlurper đi kèm với một vài biến thể để triển khai trình phân tích cú pháp. Đôi khi bạn có thể có các yêu cầu khác nhau khi phân tích một số chuỗi nhất định. Hãy lấy một ví dụ trong đó một người cần đọc JSON được trả về từ phản hồi từ máy chủ web. Trong trường hợp như vậy, sẽ có lợi khi sử dụng biến thể phân tích cú pháp JsonParserLax. Trình phân tích cú pháp này cho phép nhận xét trong văn bản JSON cũng như không có chuỗi trích dẫn, v.v. Để chỉ định loại trình phân tích cú pháp này, bạn cần sử dụng loại trình phân tích cú pháp JsonParserType.LAX khi xác định một đối tượng của JsonSlurper.
Hãy xem một ví dụ về điều này được đưa ra dưới đây. Ví dụ là lấy dữ liệu JSON từ máy chủ web bằng mô-đun http. Đối với loại truyền tải này, tùy chọn tốt nhất là đặt loại phân tích cú pháp thành biến thể JsonParserLax.
http.request( GET, TEXT ) {
headers.Accept = 'application/json'
headers.'User-Agent' = USER_AGENT
response.success = {
res, rd ->
def jsonText = rd.text
//Setting the parser type to JsonParserLax
def parser = new JsonSlurper().setType(JsonParserType.LAX)
def jsonResp = parser.parseText(jsonText)
}
}
Tương tự, các loại phân tích cú pháp bổ sung sau đây có sẵn trong Groovy:
Trình phân tích cú pháp JsonParserCharArray về cơ bản nhận một chuỗi JSON và hoạt động trên mảng ký tự bên dưới. Trong quá trình chuyển đổi giá trị, nó sao chép các mảng con ký tự (một cơ chế được gọi là "cắt") và hoạt động trên chúng riêng lẻ.
JsonFastParser là một biến thể đặc biệt của JsonParserCharArray và là trình phân tích cú pháp nhanh nhất. JsonFastParser còn được gọi là trình phân tích cú pháp lớp phủ chỉ mục. Trong quá trình phân tích cú pháp của Chuỗi JSON đã cho, nó cố gắng hết sức có thể để tránh tạo ra các mảng char hoặc phiên bản Chuỗi mới. Nó chỉ giữ các con trỏ đến mảng ký tự gốc bên dưới mà thôi. Ngoài ra, nó làm giảm khả năng tạo đối tượng càng muộn càng tốt.
JsonParserUsingCharacterSource là một trình phân tích cú pháp đặc biệt cho các tệp rất lớn. Nó sử dụng một kỹ thuật gọi là "cửa sổ ký tự" để phân tích cú pháp các tệp JSON lớn (trong trường hợp này có nghĩa là tệp lớn có kích thước trên 2MB) với các đặc điểm hiệu suất không đổi.
Phân tích cú pháp văn bản
Hãy xem một số ví dụ về cách chúng ta có thể sử dụng lớp JsonSlurper.
import groovy.json.JsonSlurper
class Example {
static void main(String[] args) {
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText('{ "name": "John", "ID" : "1"}')
println(object.name);
println(object.ID);
}
}
Trong ví dụ trên, chúng ta -
Đầu tiên tạo một phiên bản của lớp JsonSlurper
Sau đó, chúng tôi đang sử dụng hàm parseText của lớp JsonSlurper để phân tích cú pháp một số văn bản JSON.
Khi chúng tôi nhận được đối tượng, bạn có thể thấy rằng chúng tôi thực sự có thể truy cập các giá trị trong chuỗi JSON thông qua khóa.
Đầu ra của chương trình trên được đưa ra dưới đây:
John
1
Phân tích cú pháp danh sách các số nguyên
Hãy xem một ví dụ khác về phương pháp phân tích cú pháp JsonSlurper. Trong ví dụ sau, chúng ta đang viết hoa một danh sách các số nguyên. Bạn sẽ nhận thấy từ codethat sau đây, chúng tôi có thể sử dụng phương thức Danh sách của từng loại và chuyển một đóng cho nó.
import groovy.json.JsonSlurper
class Example {
static void main(String[] args) {
def jsonSlurper = new JsonSlurper()
Object lst = jsonSlurper.parseText('{ "List": [2, 3, 4, 5] }')
lst.each { println it }
}
}
Đầu ra của chương trình trên được đưa ra dưới đây:
List=[2, 3, 4, 5]
Danh sách phân tích cú pháp các kiểu dữ liệu nguyên thủy
Trình phân tích cú pháp JSON cũng hỗ trợ các kiểu dữ liệu nguyên thủy là chuỗi, số, đối tượng, true, false và null. Lớp JsonSlurper chuyển đổi các kiểu JSON này thành các kiểu Groovy tương ứng.
Ví dụ sau cho thấy cách sử dụng JsonSlurper để phân tích cú pháp chuỗi JSON. Và ở đây bạn có thể thấy rằng JsonSlurper có thể phân tích cú pháp các mục riêng lẻ thành các kiểu nguyên thủy tương ứng của chúng.
import groovy.json.JsonSlurper
class Example {
static void main(String[] args) {
def jsonSlurper = new JsonSlurper()
def obj = jsonSlurper.parseText ''' {"Integer": 12, "fraction": 12.55, "double": 12e13}'''
println(obj.Integer);
println(obj.fraction);
println(obj.double);
}
}
Đầu ra của chương trình trên được đưa ra dưới đây:
12
12.55
1.2E+14
JsonOutput
Bây giờ chúng ta hãy nói về cách in đầu ra trong Json. Điều này có thể được thực hiện bằng phương thức JsonOutput. Phương thức này chịu trách nhiệm tuần tự các đối tượng Groovy thành chuỗi JSON.
Cú pháp
Static string JsonOutput.toJson(datatype obj)
Parameters - Các tham số có thể là một đối tượng của kiểu dữ liệu - Số, Boolean, ký tự, Chuỗi, Ngày, Bản đồ, bao đóng, v.v.
Return type - Kiểu trả về là một chuỗi json.
Thí dụ
Sau đây là một ví dụ đơn giản về cách có thể đạt được điều này.
import groovy.json.JsonOutput
class Example {
static void main(String[] args) {
def output = JsonOutput.toJson([name: 'John', ID: 1])
println(output);
}
}
Đầu ra của chương trình trên được đưa ra dưới đây:
{"name":"John","ID":1}
JsonOutput cũng có thể được sử dụng cho các vật thể trơn cũ. Trong ví dụ sau, bạn có thể thấy rằng chúng ta đang thực sự chuyển các đối tượng có kiểu Student sang phương thức JsonOutput.
import groovy.json.JsonOutput
class Example {
static void main(String[] args) {
def output = JsonOutput.toJson([ new Student(name: 'John',ID:1),
new Student(name: 'Mark',ID:2)])
println(output);
}
}
class Student {
String name
int ID;
}
Đầu ra của chương trình trên được đưa ra dưới đây:
[{"name":"John","ID":1},{"name":"Mark","ID":2}]