Simple JSON เป็นกรอบการแยกวิเคราะห์ Java JSON ที่พัฒนาโดย Google ตามโปรโตคอล Apache
หน้าแรกของ Json-Simple: //www.vevb.com/softs/455885.html
ไฟล์ที่ดาวน์โหลดคือ: json_simple.jar
ตัวอย่างที่ 1: วิธีที่สะดวกมากในการใช้ JsonValue
System.out.println ("============================================ string s =" [0, {/"1/": {/"2/": {/"3/": {/"4/": [5, {/" obj = jsonvalue.parse (s); obj2 = (jsonobject) array.get (1); s = "{}";JsonObject สืบทอดแผนที่ในขณะที่ JsonArray สืบทอดรายการดังนั้นคุณสามารถใช้วิธีมาตรฐานของ MAP และรายการเพื่อใช้ JSONObject และ JSONARRAY
JsonValue สามารถใช้อาร์เรย์หรือวัตถุ
ตัวอย่างที่ 2: วิธีที่รวดเร็วโดยใช้ jsonparser
JSONPARSER PARSER = New JSONPARSER (); System.out.println ("=================================================================================================== array = (jsonarray) obj; system.out.println ("======== องค์ประกอบที่ 2 ของอาร์เรย์ ===================; System.out.println (array.get.get (1)); System.out.println ("===== ฟิลด์ /" 1 /"======================================; System.out.println (obj2.get (" 1 ")); s ="} "; s = "5,]";การใช้ JSONPARSER ต้องมีข้อยกเว้นที่จะถูกจับได้
ตัวอย่างที่ 3: การจัดการข้อยกเว้น
string jsontext = "[[null, 123.45,/" a // tb c/"]}, true"; JSONPARSER PARSER = New JSONPARSER (); ลอง {parser.parse (jsontext); } catch (parseexception pe) {system.out.println ("ตำแหน่ง:" + pe.getPosition ()); System.out.println (PE); -ผลการดำเนินการ:
ตำแหน่ง: 25 โทเค็นที่ไม่คาดคิดรั้งขวา (}) ที่ตำแหน่ง 25
ตัวอย่างที่ 4: โรงงานคอนเทนเนอร์
ใช้คลาส containerFactory เพื่อสร้างโรงงานคอนเทนเนอร์
String jsonText = "{/" First/": 123,/" Second/": [4, 5, 6],/" Third/": 789}"; JSONPARSER PARSER = New JSONPARSER (); containerFactory containerFactory = new containerfactory () {รายการสาธารณะ creatarrayContainer () {ส่งคืนใหม่ LinkedList (); } แผนที่สาธารณะ createObjectContainer () {ส่งคืนใหม่ LinkedHashMap (); - ลอง {แผนที่ json = (แผนที่) parser.parse (jsontext, containerFactory); ตัววนซ้ำ iter = json.entryset (). iterator (); System.out.println ("== iterate result =="); ในขณะที่ (iter.hasnext ()) {map.entry entry = (map.entry) iter.next (); System.out.println (entry.getKey () + "=>" + entry.getValue ()); } system.out.println ("== tojsonstring () =="); System.out.println (jsonvalue.tojsonstring (JSON)); } catch (parseexception pe) {system.out.println (pe); -ผลลัพธ์มีดังนี้:
== iterate result == first => 123 second => [4,5,6] สาม => 789 == tojsonstring () == {"แรก": 123, "สอง": [4,5,6], "สาม": 789} หากคุณไม่ได้ใช้โรงงานคอนเทนเนอร์ Simple-JSON ใช้ JSONObject และ JsonArray โดยค่าเริ่มต้น ตัวอย่างที่ 5: การประมวลผลเนื้อหา SAX ที่หยุดยั้งได้อย่าง ง่าย ๆ แนะนำวิธีการประมวลผลเนื้อหา SAX แบบหยุดได้อย่างง่ายเพื่อประมวลผลสตรีมข้อความ ผู้ใช้สามารถอยู่ได้ทุกจุดในสตรีมอินพุตแบบลอจิคัลจากนั้นประมวลผลตรรกะอื่น ๆ จากนั้นดำเนินการต่อด้วยการประมวลผลก่อนหน้า อย่ารอให้สตรีมทั้งหมดประมวลผล นี่คือตัวอย่าง keyfinder.java: คลาส KeyFinder ใช้ ContentHandler {ค่าวัตถุส่วนตัว; บูลีนส่วนตัวพบ = เท็จ; บูลีนส่วนตัวสิ้นสุด = เท็จ; คีย์สตริงส่วนตัว การจับคู่สตริงส่วนตัว; โมฆะสาธารณะ setMatchKey (สตริง matchkey) {this.matchkey = matchkey; } วัตถุสาธารณะ getValue () {ค่าคืน; } บูลีนสาธารณะ isend () {return end; } โมฆะสาธารณะ setFound (พบบูลีน) {this.found = พบ; } บูลีนสาธารณะ isfound () {พบการส่งคืน; } โมฆะสาธารณะ startjson () พ่น parseexception, ioexception {found = false; end = false; } โมฆะสาธารณะ endjson () พ่น parseexception, ioexception {end = true; } public Boolean Primitive (ค่าวัตถุ) พ่น parseexception, ioexception {if (key! = null) {ถ้า (key.equals (matchkey)) {found = true; this.value = ค่า; key = null; กลับเท็จ; }} ส่งคืนจริง; } Public Boolean StartArray () พ่น Parseexception, iOexception {return true; } Public Boolean StartObject () พ่น Parseexception, iOexception {return true; } Public Boolean StartObjectEntry (คีย์สตริง) พ่น ParseException, ioException {this.key = key; กลับมาจริง; } บูลีนสาธารณะ endarray () พ่น parseexception, ioexception {return false; } บูลีนสาธารณะ endoBject () พ่น parseexception, ioexception {return true; } บูลีนสาธารณะ endobjectentry () พ่น parseexception, ioexception {return true; - ตรรกะหลัก: สตริง jsontext = "{/" แรก/": 123,/" สอง/": [{/" k1/": {/" id/":/" id1/"}}, 4, 5, 6, {/" id/": 123}] JSONPARSER PARSER = NEWJSONPARSER (); KeyFinder Finder = NewKeyFinder (); Finder.SetMatchKey ("ID"); ลอง {ในขณะที่ (! finder.isend ()) {parser.parse (jsontext, finder, true); if (finder.isfound ()) {finder.setFound (เท็จ); System.out.println ("พบ ID:"); System.out.println (finder.getValue ()); }}} catch (parseexception pe) {pe.printstacktrace (); - ผลการดำเนินการ:พบ ID: ID1 Found ID: 123 Found ID: NULLตัวอย่างที่ 6: กราฟวัตถุทั้งหมดถูกวิเคราะห์โดยใช้ Sax-like
คลาส Transformer ใช้ ContentHandler {Valuestack ส่วนตัวสแต็ก; วัตถุสาธารณะ getResult () {ถ้า (valuestack == null || valuestack.size () == 0) ส่งคืน null; return valuestack.peek (); } บูลีนสาธารณะ endarray () พ่น parseexception, ioexception {trackback (); กลับมาจริง; } โมฆะสาธารณะ endjson () พ่น parseexception, ioexception {} public boolean endobject () พ่น parseexception, ioexception {trackback (); กลับมาจริง; } บูลีนสาธารณะ endobjectentry () พ่น parseexception, ioexception {ค่าวัตถุ = valuestack.pop (); Key Object = Valuestack.pop (); แผนที่ parent = (แผนที่) Valuestack.peek (); parent.put (คีย์, ค่า); กลับมาจริง; } private void trackback () {if (valuestack.size ()> 1) {ค่าวัตถุ = valuestack.pop (); Object prev = valuestack.peek (); if (พรีอินสแตนซ์ของสตริง) {valuestack.push (ค่า); }}} การใช้โมฆะส่วนตัว (ค่าวัตถุ) {ถ้า (valuestack.size () == 0) valuestack.push (ค่า); else {object prev = valuestack.peek (); if (รายการอินสแตนซ์ของก่อนหน้า) {รายการ array = (รายการ) ก่อนหน้า; array.add (ค่า); } else {valuestack.push (ค่า); }}} บูลีนสาธารณะดั้งเดิม (ค่าวัตถุ) พ่น parseexception, ioexception {การใช้จ่าย (ค่า); กลับมาจริง; } Public Boolean StartArray () พ่น Parseexception, iOexception {list array = new JsonArray (); การบริโภค Value (อาร์เรย์); Valuestack.push (อาร์เรย์); กลับมาจริง; } โมฆะสาธารณะ startjson () พ่น parseexception, ioexception {valuestack = new Stack (); } Public Boolean StartObject () พ่น ParseException, iOException {map object = new JsonObject (); Vesumsevalue (วัตถุ); Valuestack.push (วัตถุ); กลับมาจริง; } บูลีนสาธารณะ startobjectentry (คีย์สตริง) พ่น parsexception, ioexception {valuestack.push (คีย์); กลับมาจริง; - ตรรกะวิธีหลัก:สตริง jsonstring = <อินพุต JSON TEXT>; ค่าวัตถุ = null; JSONPARSER PARSER = New JSONPARSER (); Transformer Transformer = New Transformer (); parser.parse (JSonstring, Transformer); value = transformer.getResult ();ผลการดำเนินการ:
สตริง jsonstring = <อินพุต JSON TEXT>; ค่าวัตถุ = null; JSONPARSER PARSER = NEWJSONPARSER (); value = parser.parse (jsonstring);หมายเหตุ: jsonpauser ไม่ปลอดภัย
JSON_ENCODE - การเข้ารหัส JSON ของตัวแปร
คำอธิบาย: String JSON_ENCODE ($ value), ส่งคืนรูปแบบ JSON ของค่า
พารามิเตอร์: ค่าที่จะเข้ารหัสอาจเป็นประเภทข้อมูลใด ๆ ยกเว้นประเภททรัพยากร
ฟังก์ชั่นนี้สามารถยอมรับข้อมูลที่เข้ารหัส UTF-8 เท่านั้น (หมายเหตุการแปล: หมายถึงข้อมูลประเภทอักขระ/สตริง)
ค่าส่งคืน: หากการเข้ารหัสสำเร็จสตริงที่แสดงใน JSON จะถูกส่งคืน