Updated: April 19, 2023 |
The following code sample uses the libjson library to encode file information as JSON data and stores that data in a string.
The prepare_file_info() function creates an encoder and adds the necessary objects and fields to store information about a file. The information is organized based on the file_t structure used in the decoding example. Then, the function writes the encoder buffer's contents to the string space provided by the caller.
#include <stdio.h> #include <sys/json.h> bool prepare_file_info(char *str, int max_finfo_size) { // In this example, we hardcode the field settings but often, they would be input // by a user or come from another source (e.g., a file or program) int id = 76; int type = 4; long long size = 99; const char *path = "/var/dhclient/leases"; json_encoder_t *enc = json_encoder_create(); // Write the 'id' value as a separate field in the top-level object, then write the // 'path', 'type', and 'size' fields in a nested object, 'info'. json_encoder_start_object(enc, NULL); json_encoder_add_int(enc, "id", id); json_encoder_start_object(enc, "info"); json_encoder_add_string(enc, "path", path); json_encoder_add_int(enc, "type", type); json_encoder_add_int_ll(enc, "size", size); json_encoder_end_object(enc); json_encoder_end_object(enc); // For error checking, we don't need to check the return value of each function // since any error will cause the subsequent json_encoder_buffer() call to fail. // Common errors are mismatched object or array start and end calls (which are // programming errors) and out-of-memory errors. json_encoder_error_t status = json_encoder_get_status(enc); // If everything above has succeeded, json_encoder_get_status() will return // JSON_ENCODER_OK if ( status != JSON_ENCODER_OK ) { printf("Data preparation failed\n"); return false; } // Write the JSON data into the string space provided by the caller snprintf(str, max_finfo_size, "JSON:%s\n", json_encoder_buffer(enc)); json_encoder_destroy(enc); return true; }
JSON:{"id":76,"info":{"type":4,"path":"/var/dhclient/leases","size":99}}
char buffer[1024]; int rc = jsnprintf(buffer, sizeof(buffer), "{ id:%d , info:{type:%d,path:%s, is_link:%b} }", id, type, path, 0);The resulting string in buffer is:
{ "id":76, "info":{ "type":4, "path":"/var/dhclient/leases", "is_link":false}}
int rc = jsnprintf(buffer, sizeof(buffer), ":c:{ id:%d , info:{type:%d,path:%s, is_link:%b} }", id, type, path, 0);generates:
{"id":76,"info":{"type":4,"path":"/var/dhclient/leases","is_link":false}}