Parson est une bibliothèque JSON légère écrite en C.
Courir:
git clone https://github.com/kgabis/parson.git
et copier Parson.h et Parson.c à votre arbre de code source.
Exécutez make test pour compiler et exécuter des tests.
Voici une fonction qui imprime les informations de base de base (date, SHA et auteur) à partir d'un référentiel 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 );
} Appel print_commits_info("torvalds", "linux"); Impressions:
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
...
Dans cet exemple, j'utilise Parson pour enregistrer les informations de l'utilisateur dans un fichier, puis le charger et valider plus tard.
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 ;
}La création de valeurs JSON est très simple grâce à la notation DOT. La hiérarchie des objets est automatiquement créée lors de l'adresse de champs spécifiques. Dans l'exemple suivant, je crée une valeur JSON simple contenant des informations de base sur une personne.
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 );
}Sortir:
{
"name": "John Smith",
"age": 25,
"address": {
"city": "Cupertino"
},
"contact": {
"emails": [
"[email protected]",
"[email protected]"
]
}
}
Je fusionnerai toujours les corrections de bugs de travail . Cependant, si vous souhaitez ajouter quelque chose de nouveau à l'API, veuillez créer un "problème" sur GitHub pour cela en premier afin que nous puissions discuter si cela devrait se retrouver dans la bibliothèque avant de commencer à l'implémenter. N'oubliez pas de suivre le style de code de Parson et d'écrire des tests appropriés.
La licence du MIT (MIT)