Parson เป็นห้องสมุด JSON ที่มีน้ำหนักเบาที่เขียนใน C.
วิ่ง:
git clone https://github.com/kgabis/parson.git
และคัดลอก parson.h และ parson.c ให้คุณต้นไม้ซอร์สโค้ด
รัน make test เพื่อรวบรวมและเรียกใช้การทดสอบ
นี่คือฟังก์ชั่นที่พิมพ์ข้อมูลการกระทำพื้นฐาน (วันที่, sha และผู้แต่ง) จากที่เก็บ GitHub
void print_commits_info ( const char * username , const char * repo ) {
JSON_Value * root_value ;
JSON_Array * commits ;
JSON_Object * commit ;
size_t i ;
char curl_command [ 512 ];
char cleanup_command [ 256 ];
char output_filename [] = "commits.json" ;
/* it ain't pretty, but it's not a libcurl tutorial */
sprintf ( curl_command ,
"curl -s "https://api.github.com/repos/%s/%s/commits" > %s" ,
username , repo , output_filename );
sprintf ( cleanup_command , "rm -f %s" , output_filename );
system ( curl_command );
/* parsing json and validating output */
root_value = json_parse_file ( output_filename );
if ( json_value_get_type ( root_value ) != JSONArray ) {
system ( cleanup_command );
return ;
}
/* getting array from root value and printing commit info */
commits = json_value_get_array ( root_value );
printf ( "%-10.10s %-10.10s %sn" , "Date" , "SHA" , "Author" );
for ( i = 0 ; i < json_array_get_count ( commits ); i ++ ) {
commit = json_array_get_object ( commits , i );
printf ( "%.10s %.10s %sn" ,
json_object_dotget_string ( commit , "commit.author.date" ),
json_object_get_string ( commit , "sha" ),
json_object_dotget_string ( commit , "commit.author.name" ));
}
/* cleanup code */
json_value_free ( root_value );
system ( cleanup_command );
} การโทร print_commits_info("torvalds", "linux"); ภาพพิมพ์:
Date SHA Author
2012-10-15 dd8e8c4a2c David Rientjes
2012-10-15 3ce9e53e78 Michal Marek
2012-10-14 29bb4cc5e0 Randy Dunlap
2012-10-15 325adeb55e Ralf Baechle
2012-10-14 68687c842c Russell King
2012-10-14 ddffeb8c4d Linus Torvalds
...
ในตัวอย่างนี้ฉันใช้ Parson เพื่อบันทึกข้อมูลผู้ใช้ไปยังไฟล์แล้วโหลดและตรวจสอบความถูกต้องในภายหลัง
void persistence_example ( void ) {
JSON_Value * schema = json_parse_string ( "{"name":""}" );
JSON_Value * user_data = json_parse_file ( "user_data.json" );
char buf [ 256 ];
const char * name = NULL ;
if ( user_data == NULL || json_validate ( schema , user_data ) != JSONSuccess ) {
puts ( "Enter your name:" );
scanf ( "%s" , buf );
user_data = json_value_init_object ();
json_object_set_string ( json_object ( user_data ), "name" , buf );
json_serialize_to_file ( user_data , "user_data.json" );
}
name = json_object_get_string ( json_object ( user_data ), "name" );
printf ( "Hello, %s." , name );
json_value_free ( schema );
json_value_free ( user_data );
return ;
}การสร้างค่า JSON นั้นง่ายมากขอบคุณสัญกรณ์ DOT ลำดับชั้นของวัตถุจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อจัดการกับฟิลด์เฉพาะ ในตัวอย่างต่อไปนี้ฉันสร้างค่า JSON อย่างง่ายที่มีข้อมูลพื้นฐานเกี่ยวกับบุคคล
void serialization_example ( void ) {
JSON_Value * root_value = json_value_init_object ();
JSON_Object * root_object = json_value_get_object ( root_value );
char * serialized_string = NULL ;
json_object_set_string ( root_object , "name" , "John Smith" );
json_object_set_number ( root_object , "age" , 25 );
json_object_dotset_string ( root_object , "address.city" , "Cupertino" );
json_object_dotset_value ( root_object , "contact.emails" , json_parse_string ( "["[email protected]","[email protected]"]" ));
serialized_string = json_serialize_to_string_pretty ( root_value );
puts ( serialized_string );
json_free_serialized_string ( serialized_string );
json_value_free ( root_value );
}เอาท์พุท:
{
"name": "John Smith",
"age": 25,
"address": {
"city": "Cupertino"
},
"contact": {
"emails": [
"[email protected]",
"[email protected]"
]
}
}
ฉันจะรวมการแก้ไขข้อบกพร่อง ในการทำงาน เสมอ อย่างไรก็ตามหากคุณต้องการเพิ่มสิ่งใหม่ ๆ ให้กับ API โปรดสร้าง "ปัญหา" บน GitHub สำหรับสิ่งนี้ก่อนเพื่อให้เราสามารถพูดคุยได้ว่าควรจะจบลงในห้องสมุดก่อนที่คุณจะเริ่มใช้งาน อย่าลืมทำตามรูปแบบรหัสของ Parson และเขียนการทดสอบที่เหมาะสม
ใบอนุญาต MIT (MIT)