Groovy - JSON
บทนี้ครอบคลุมถึงวิธีการที่เราสามารถใช้ภาษา Groovy สำหรับการแยกวิเคราะห์และสร้างออบเจ็กต์ JSON
ฟังก์ชัน JSON
ซีเนียร์ No | ฟังก์ชันและไลบรารี |
---|---|
1 | JsonSlurper JsonSlurper เป็นคลาสที่แยกวิเคราะห์ข้อความ JSON หรือเนื้อหาผู้อ่านเป็นข้อมูล Groovy โครงสร้างเช่นแผนที่รายการและประเภทดั้งเดิมเช่น Integer, Double, Boolean และ String |
2 | JsonOutput วิธีนี้รับผิดชอบในการต่ออนุกรมวัตถุ Groovy เป็นสตริง JSON |
การแยกวิเคราะห์ข้อมูลโดยใช้ JsonSlurper
JsonSlurper เป็นคลาสที่แยกวิเคราะห์ข้อความ JSON หรือเนื้อหาผู้อ่านลงในโครงสร้างข้อมูล Groovy เช่นแผนที่รายการและประเภทดั้งเดิมเช่น Integer, Double, Boolean และ String
ไวยากรณ์
def slurper = new JsonSlurper()
JSON slurper แยกวิเคราะห์ข้อความหรือเนื้อหาของผู้อ่านในโครงสร้างข้อมูลของรายการและแผนที่
คลาส JsonSlurper มาพร้อมกับตัวแปรสองสามตัวสำหรับการใช้งานตัวแยกวิเคราะห์ บางครั้งคุณอาจมีข้อกำหนดที่แตกต่างกันในการแยกวิเคราะห์สตริงบางอย่าง มาดูตัวอย่างที่เราต้องอ่าน JSON ซึ่งส่งคืนจากการตอบสนองจากเว็บเซิร์ฟเวอร์ ในกรณีนี้คุณควรใช้ตัวแปร JsonParserLax ตัวแยกวิเคราะห์ พาร์ซีนี้อนุญาตให้แสดงความคิดเห็นในข้อความ JSON และไม่มีสตริงคำพูดเป็นต้นในการระบุตัววิเคราะห์ประเภทนี้คุณต้องใช้ประเภทตัวแยกวิเคราะห์ JsonParserType.LAX เมื่อกำหนดอ็อบเจ็กต์ของ JsonSlurper
ลองดูตัวอย่างที่ระบุด้านล่าง ตัวอย่างคือการรับข้อมูล JSON จากเว็บเซิร์ฟเวอร์โดยใช้โมดูล http สำหรับการส่งผ่านประเภทนี้ตัวเลือกที่ดีที่สุดคือการตั้งค่าประเภทตัววิเคราะห์เป็นตัวแปร 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)
}
}
ในทำนองเดียวกันประเภทตัวแยกวิเคราะห์เพิ่มเติมต่อไปนี้มีอยู่ใน Groovy -
ตัวแยกวิเคราะห์ JsonParserCharArray โดยทั่วไปจะใช้สตริง JSON และดำเนินการกับอาร์เรย์อักขระที่อยู่เบื้องหลัง ในระหว่างการแปลงมูลค่าจะคัดลอกอาร์เรย์ย่อยของอักขระ (กลไกที่เรียกว่า "การสับ") และทำงานแยกกัน
JsonFastParser เป็นตัวแปรพิเศษของ JsonParserCharArray และเป็นตัวแยกวิเคราะห์ที่เร็วที่สุด JsonFastParser เรียกอีกอย่างว่าตัวแยกวิเคราะห์ดัชนีซ้อนทับ ในระหว่างการแยกวิเคราะห์สตริง JSON ที่กำหนดให้พยายามอย่างหนักที่สุดเพื่อหลีกเลี่ยงการสร้างอาร์เรย์ถ่านหรืออินสแตนซ์สตริงใหม่ เพียงแค่เก็บพอยน์เตอร์ไปยังอาร์เรย์อักขระดั้งเดิมเท่านั้น นอกจากนี้ยังเลื่อนการสร้างวัตถุให้ช้าที่สุด
JsonParserUsingCharacterSource เป็นตัวแยกวิเคราะห์พิเศษสำหรับไฟล์ขนาดใหญ่มาก โดยใช้เทคนิคที่เรียกว่า "character windowing" เพื่อแยกวิเคราะห์ไฟล์ JSON ขนาดใหญ่ (ในกรณีนี้หมายถึงไฟล์ขนาดใหญ่ที่มีขนาดใหญ่กว่า 2MB) โดยมีลักษณะการทำงานคงที่
การแยกวิเคราะห์ข้อความ
มาดูตัวอย่างวิธีการใช้คลาส 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);
}
}
ในตัวอย่างข้างต้นเราคือ -
ขั้นแรกให้สร้างอินสแตนซ์ของคลาส JsonSlurper
จากนั้นเราจะใช้ฟังก์ชัน parseText ของคลาส JsonSlurper เพื่อแยกวิเคราะห์ข้อความ JSON
เมื่อเราได้รับวัตถุคุณจะเห็นว่าเราสามารถเข้าถึงค่าในสตริง JSON ได้ผ่านทางคีย์
ผลลัพธ์ของโปรแกรมข้างต้นแสดงไว้ด้านล่าง -
John
1
การแยกวิเคราะห์รายการจำนวนเต็ม
ลองมาดูตัวอย่างอื่นของวิธีการแยกวิเคราะห์ JsonSlurper ในตัวอย่างต่อไปนี้เรากำลังยกรายการจำนวนเต็ม คุณจะสังเกตเห็นได้จากรหัสต่อไปนี้ที่เราสามารถใช้วิธีการรายการของแต่ละรายการและส่งผ่านการปิดไปได้
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 }
}
}
ผลลัพธ์ของโปรแกรมข้างต้นแสดงไว้ด้านล่าง -
List=[2, 3, 4, 5]
การแยกวิเคราะห์รายการประเภทข้อมูลดั้งเดิม
ตัวแยกวิเคราะห์ JSON ยังสนับสนุนชนิดข้อมูลพื้นฐานของสตริงตัวเลขอ็อบเจ็กต์จริงเท็จและ null คลาส JsonSlurper แปลงประเภท JSON เหล่านี้เป็นประเภท Groovy ที่สอดคล้องกัน
ตัวอย่างต่อไปนี้แสดงวิธีใช้ JsonSlurper เพื่อแยกวิเคราะห์สตริง JSON และที่นี่คุณจะเห็นว่า JsonSlurper สามารถแยกวิเคราะห์แต่ละรายการเป็นประเภทดั้งเดิมตามลำดับ
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);
}
}
ผลลัพธ์ของโปรแกรมข้างต้นแสดงไว้ด้านล่าง -
12
12.55
1.2E+14
JsonOutput
ตอนนี้เรามาพูดถึงวิธีการพิมพ์เอาต์พุตใน Json ซึ่งสามารถทำได้โดยวิธี JsonOutput วิธีนี้รับผิดชอบในการต่ออนุกรมวัตถุ Groovy เป็นสตริง JSON
ไวยากรณ์
Static string JsonOutput.toJson(datatype obj)
Parameters - พารามิเตอร์สามารถเป็นอ็อบเจ็กต์ของประเภทข้อมูล - Number, Boolean, character, String, Date, Map, closed เป็นต้น
Return type - ประเภทการส่งคืนคือสตริง json
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างง่ายๆว่าจะทำได้อย่างไร
import groovy.json.JsonOutput
class Example {
static void main(String[] args) {
def output = JsonOutput.toJson([name: 'John', ID: 1])
println(output);
}
}
ผลลัพธ์ของโปรแกรมข้างต้นแสดงไว้ด้านล่าง -
{"name":"John","ID":1}
JsonOutput ยังสามารถใช้สำหรับวัตถุเก่า ๆ ที่มีร่อง ในตัวอย่างต่อไปนี้คุณจะเห็นว่าเรากำลังส่งออบเจ็กต์ประเภท Student ไปยังเมธอด 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;
}
ผลลัพธ์ของโปรแกรมข้างต้นแสดงไว้ด้านล่าง -
[{"name":"John","ID":1},{"name":"Mark","ID":2}]