Tiny-JSON เป็นตัวแยกวิเคราะห์ JSON ที่ใช้งานง่ายและใช้งานง่ายที่เขียนใน C และเหมาะสำหรับระบบฝังตัว มันเร็วแข็งแกร่งและพกพา
มันไม่เพียง แต่เป็นโทเค็น คุณสามารถเข้าถึงข้อมูล JSON ในรูปแบบสตริงหรือรับค่าดั้งเดิมโดยตรงเป็นตัวแปรประเภท C โดยไม่สูญเสียประสิทธิภาพใด ๆ
คุณสามารถเข้าถึงฟิลด์ JSON แบบหนึ่งต่อหนึ่งหรือรับค่าของพวกเขาด้วยชื่อของพวกเขา สิ่งนี้ช่วยให้คุณประหยัดสายซอร์สโค้ดจำนวนมากและเวลาในการพัฒนา
หากคุณต้องการสร้างสตริง JSON โปรดไปที่: https://github.com/rafagafe/json-maker
เมื่อแยกวิเคราะห์สตริงข้อความ JSON ต้นไม้จะถูกสร้างขึ้นโดยการเชื่อมโยงโครงสร้าง JSON_T การนำทางหรือสอบถามต้นไม้นี้เป็นเรื่องง่ายมากโดยใช้ API ที่ให้ไว้
เพื่อรักษาการใช้หน่วยความจำที่ลดลงและการประมวลผลอย่างรวดเร็วไม่ได้คัดลอก เมื่อคุณขอค่าขององค์ประกอบ JSON การอ้างอิงถึงสตริง JSON ดั้งเดิมจะถูกส่งคืน
เพื่ออำนวยความสะดวกในการประมวลผลข้อมูลสตริงที่ส่งคืนจะถูกยกเลิก นี่คือความสำเร็จโดยการตั้งค่าตัวละคร NULL เป็นตัวควบคุม JSON เช่นเครื่องหมายจุลภาควงเล็บวงเล็บวงเล็บและเครื่องหมายใบเสนอราคา
API Tiny-JSON มีสองประเภท jsonType_t เป็นการแจกแจงสำหรับประเภทฟิลด์ JSON ที่เป็นไปได้ทั้งหมด json_t เป็นโครงสร้างที่มีข้อมูลภายในที่คุณไม่จำเป็นต้องรู้
typedef enum {
JSON_OBJ , JSON_ARRAY , JSON_TEXT , JSON_BOOLEAN ,
JSON_INTEGER , JSON_REAL , JSON_NULL
} jsonType_t ; ในการแยกวิเคราะห์สตริง JSON ให้ใช้ json_create() เราผ่านมันมาเป็นอาร์เรย์ของ json_t เพื่อจัดสรรฟิลด์ JSON หากสตริง JSON นั้นไม่ดีหรือมีฟิลด์มากกว่าอาร์เรย์ฟังก์ชั่นนี้จะส่งคืนตัวชี้โมฆะ
enum { MAX_FIELDS = 4 };
json_t pool [ MAX_FIELDS ];
char str [] = "{ "name": "peter", "age": 32 }" ;
json_t const * parent = json_create ( str , pool , MAX_FIELDS );
if ( parent == NULL ) return EXIT_FAILURE ; ในการรับฟิลด์ด้วยชื่อเราใช้ json_getProperty() หากฟิลด์ไม่มีอยู่ฟังก์ชันจะส่งคืนตัวชี้โมฆะ เพื่อรับประเภทของฟิลด์เราใช้ json_getType()
json_t const * namefield = json_getProperty ( parent , "name" );
if ( namefield == NULL ) return EXIT_FAILURE ;
if ( json_getType ( namefield ) != JSON_TEXT ) return EXIT_FAILURE ; เพื่อให้ได้ค่าของฟิลด์ในรูปแบบสตริงเราใช้ json_getValue() มันจะส่งคืนสตริงที่มีค่าโมฆะที่ถูกต้องเสมอ
char const * namevalue = json_getValue ( namefield );
printf ( "%s%s%s" , "Name: '" , namevalue , "'.n" ); สำหรับฟิลด์ดั้งเดิมเราสามารถใช้ฟังก์ชั่นเฉพาะเพื่อรับค่าฟิลด์โดยตรงเป็นประเภท C, fi json_getInteger() หรือเราสามารถใช้ json_getValue() เพื่อรับค่าในรูปแบบข้อความ
json_t const * agefield = json_getProperty ( parent , "age" );
if ( agefield == NULL ) return EXIT_FAILURE ;
if ( json_getType ( agefield ) != JSON_INTEGER ) return EXIT_FAILURE ;
int64_t agevalue = json_getInteger ( agefield );
printf ( "%s%lld%s" , "Age: '" , agevalue , "'.n" );
char const * agetxt = json_getValue ( agefield );
printf ( "%s%s%s" , "Age: '" , agetxt , "'.n" );ตัวอย่างวิธีการใช้วัตถุและอาร์เรย์ JSON ที่ซ้อนกันโปรดดูตัวอย่าง -01.c