37static unsigned char buf[256 * 1024];
41 size_t bufsz =
sizeof(buf);
45 perror(
"Failed to decode JSON document");
52 perror(
"Failed to get data array");
57 perror(
"Failed to create iterator");
61 size_t el_densest_ofs = 0;
62 double el_densest_kg_per_m3 = 0.0;
65 if (
lite3_is_null(buf, buflen, el_ofs,
"density_kg_per_m3")) {
69 if (
lite3_get_f64(buf, buflen, el_ofs,
"density_kg_per_m3", &kg_per_m3) < 0) {
70 perror(
"Failed to get element density");
73 if (kg_per_m3 > el_densest_kg_per_m3) {
74 el_densest_ofs = el_ofs;
75 el_densest_kg_per_m3 = kg_per_m3;
79 perror(
"Failed to get iter element");
82 if (el_densest_ofs == 0) {
83 perror(
"Failed to find densest element");
88 if (
lite3_get_str(buf, buflen, el_densest_ofs,
"name", &name) < 0) {
89 perror(
"Failed to get densest element name");
92 printf(
"densest element: %s\n\n",
LITE3_STR(buf, name));
94 printf(
"Convert Lite³ to JSON by returned heap pointer (prettified):\n");
98 perror(
"Failed encode JSON");
101 printf(
"%s\n\n", json);
104 printf(
"Convert Lite³ to JSON by writing to buffer (non-prettified):\n");
105 size_t json_buf_size = 1024;
106 char *json_buf = malloc(json_buf_size);
108 if ((ret_i64 =
lite3_json_enc_buf(buf, buflen, el_densest_ofs, json_buf, json_buf_size)) < 0) {
109 perror(
"Failed encode JSON");
112 size_t json_buf_len = (size_t)ret_i64;
113 printf(
"%s\n", json_buf);
114 printf(
"json bytes written: %zu\n", json_buf_len);
#define lite3_get_arr(buf, buflen, ofs, key, out)
Get array by key.
#define lite3_get_f64(buf, buflen, ofs, key, out)
Get floating point value by key.
#define lite3_get_str(buf, buflen, ofs, key, out)
Get string value by key.
#define LITE3_ITER_ITEM
Return value of lite3_iter_next(); iterator produced an item, continue;.
int lite3_iter_next(const unsigned char *buf, size_t buflen, lite3_iter *iter, lite3_str *out_key, size_t *out_val_ofs)
Get the next item from a lite3 iterator.
static int lite3_iter_create(const unsigned char *buf, size_t buflen, size_t ofs, lite3_iter *out)
Create a lite3 iterator for the given object or array.
int lite3_json_dec_file(unsigned char *buf, size_t *__restrict out_buflen, size_t bufsz, const char *__restrict path)
Convert JSON from file path to Lite³
char * lite3_json_enc_pretty(const unsigned char *buf, size_t buflen, size_t ofs, size_t *__restrict out_len)
Convert Lite³ to JSON prettified string.
int64_t lite3_json_enc_buf(const unsigned char *buf, size_t buflen, size_t ofs, char *__restrict json_buf, size_t json_bufsz)
Convert Lite³ to JSON and write to output buffer.
#define LITE3_STR(buf, val)
Generational pointer / safe access wrapper.
#define lite3_is_null(buf, buflen, ofs, key)
Find value by key and test for null type.
Struct containing iterator state.
Struct holding a reference to a string inside a Lite³ buffer.