JSonstream เป็นห้องสมุดที่ให้บริการ API สตรีมมิ่งระดับต่ำสำหรับการอ่านและเขียนมาร์กอัป JSON ไม่มีการทำให้เป็นอนุกรมอัตโนมัติหรือ deserialization เกิดขึ้นและไม่มีการสร้างวัตถุในหน่วยความจำ เป็นผลให้มีค่าใช้จ่ายน้อยมากและคุณยังสามารถจัดการมาร์กอัป JSON ขนาดใหญ่เกินไปที่จะพอดีกับหน่วยความจำ ตัวแยกวิเคราะห์ยังทนต่อความผิดพลาดและสามารถรายงานและกู้คืนจากข้อผิดพลาดบางอย่างเช่นการทำรังที่ไม่ถูกต้องหรือเครื่องหมายจุลภาคที่หายไป มันใช้งานง่ายและปรับให้เข้ากับเคสการใช้งานของคุณเอง
ห้องสมุด JSON อื่น ๆ ทำสิ่งต่าง ๆ มากมายในครั้งเดียว เมื่อแยกวิเคราะห์ JSON พวกเขาไม่เพียงแยกวิเคราะห์ แต่ยังเปลี่ยนมาร์กอัปเป็นต้นไม้วัตถุหรือแม้แต่ใช้การสะท้อน/RTTI เพื่อแมปโดยอัตโนมัติระหว่างวัตถุของคุณเองและการเป็นตัวแทน JSON ของพวกเขา ตัวแยกวิเคราะห์ใน JSonstream ในทางกลับกันเป็น เพียง ตัวแยกวิเคราะห์ สิ่งที่คุณทำกับข้อมูลนั้นขึ้นอยู่กับคุณทั้งหมด นี่ก็หมายความว่าคลาส/โครงสร้าง/บันทึกของคุณไม่จำเป็นต้องเป็นตัวแทน 1: 1 ของ JSON ซึ่งจะมีประโยชน์มากเมื่อทำงานกับ JSON API ที่มีอยู่
ในขณะที่ไลบรารี JSON อื่น ๆ บังคับให้คุณกำหนดโครงสร้าง JSON อย่างเปิดเผยใน JSonstream โครงสร้างถูกกำหนดเป็นรหัสซึ่งทำให้มีความยืดหยุ่นและแสดงออกมากขึ้น ตัวอย่างเช่นหากมีค่าที่อาจเป็น null หรือจำนวนเต็มคุณสามารถทดสอบได้แทนที่จะต้องประกาศประเภท Nullable<int> พิเศษด้วยวิธีการมากเกินไป เมื่อข้อมูลจำเพาะ JSON ของคุณมีความซับซ้อนมากขึ้นวิธีการประกาศโดยไลบรารีอื่น ๆ จะยากที่จะอ่านและบำรุงรักษาและส่งผลให้รหัสหม้อไอน้ำจำนวนมาก คุณจบลงด้วยการเขียนโค้ดทัวริงสมบูรณ์โดยใช้ไวยากรณ์เทมเพลตซึ่งไม่ใช่สิ่งที่คุณต้องการ JSonstream ในทางกลับกันเพียงแค่ให้คุณใช้ภาษาทัวริงที่สมบูรณ์ตามที่คุณต้องการ
การอ่าน:
var
s: string;
i: integer;
...
begin
Stream := TStringStream.Create( ' ["Hello", "World", 42] ' );
Reader := TJsonReader.Create(Stream);
if Reader.List then
while Reader.Advance <> jsListEnd do
begin
if Reader.Str(s) then
WriteLn(s)
else if Reader.Number(i) then
WriteLn(i)
end ;
end ;การเขียน:
begin
Stream := TIOStream.Create(iosOutput);
Writer := TJsonWriter.Create(Stream,[],true);
Writer.Dict;
Writer.Key( ' Hello ' );
Writer.Str( ' World ' );
Writer.Key( ' Flag ' );
Writer.Bool(true);
Writer.Key( ' Numbers ' );
Writer.List;
Writer.Number( 1 );
Writer.Number( 2 );
Writer.Number( 3 );
Writer.ListEnd;
Writer.DictEnd;
end ;-
{
"Hello" : " World " ,
"Flag" : true ,
"Numbers" : [
1 ,
2 ,
3
]
}ค้นหาตัวอย่างเพิ่มเติมที่นี่
ห้องสมุดนี้สามารถอ่านและเขียนมาตรฐานต่อไปนี้:
มันปฏิบัติตามมาตรฐานอย่างใกล้ชิดและสามารถใช้ในการตรวจสอบหรือฆ่าเชื้อมาร์กอัป JSON มันสามารถแยกวิเคราะห์ต่อไปหลังจากข้อผิดพลาดหากต้องการ ดูตัวอย่างสำหรับการใช้งานใน Pascal/Example/Jsonecho
ไลบรารีสามารถประมวลผลอินพุตโดยพลการโดยมีลักษณะรันไทม์ที่คาดการณ์ได้ สตริงและปุ่มวัตถุสามารถประมวลผลชิ้นส่วนโดยใช้วิธีการ StrBuf และ KeyBuf และไม่จำเป็นต้องอยู่ในหน่วยความจำอย่างครบถ้วน ความหมายของฟังก์ชั่นเหล่านี้คล้ายกับ read syscall บนระบบ Posix
เวลาที่ต้องใช้ในการแยกวิเคราะห์ไฟล์ JSON ถูก จำกัด ด้วย O (N + E*K) โดยที่ n คือความยาวในไบต์ E คือจำนวนข้อผิดพลาดที่แก้ไขและ k คือความลึกของรังสูงสุด สำหรับกรณีการใช้งานส่วนใหญ่การยกเลิกข้อผิดพลาดครั้งแรกนั้นไม่เป็นไร (เป็นค่าเริ่มต้น) ซึ่งในกรณีนี้รันไทม์จะกลายเป็น o (n) การใช้หน่วยความจำนั้นล้อมรอบด้วย O (k) คุณสามารถระบุความลึกของการทำรังสูงสุดในระหว่างการเริ่มต้น ตัวแยกวิเคราะห์จะยกเลิกเมื่อถึงขีด จำกัด นี้
เอาท์พุทสามารถพิมพ์ได้สวยถ้าต้องการหรือใช้การเป็นตัวแทนขนาดกะทัดรัดโดยไม่มีช่องว่างพิเศษ
พื้นที่เก็บข้อมูลนี้มีโฟลเดอร์ย่อยสำหรับการใช้ภาษาต่างๆของห้องสมุด ปัจจุบันมีการดำเนินการเพียงอย่างเดียวใน Pascal แต่มีการวางแผนการใช้งานอื่น ๆ (เช่น C)
โฟลเดอร์ย่อย:
| โฟลเดอร์ | คำอธิบาย |
|---|---|
| ประเทศปาสคาล | การใช้งาน pascal ของ JSonstream |
โครงการนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT
Copyright 2021 Philip Zander
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.