Проверьте замороженную библиотеку https://github.com/cesanta/frozen является крошечной, переносимой и без зависимостей.
Для вашего случая здесь решение:
#include <stdio.h>
#include "frozen.c"
static void scan_array(const char *str, int len, void *user_data) {
struct json_token t;
int i;
float price;
int casted;
printf("Parsing array: %.*s\n", len, str);
for (i = 0; json_scanf_array_elem(str, len, "", i, &t) > 0; i++) {
printf("Index %d, token %.*s\n", i, t.len, t.ptr);
json_scanf(t.ptr, t.len, "{price: %f}", &price);
casted = (int)price;
printf("Price %.2f : price casted %d \n", price, casted);
}
}
int main(void) {
const char *str =
"{\"success\":true,\"errors\":[],\"results\":[{\"productConditionId\":3442759,\"price\":169.54,\"lowestRange\":155.00,\"highestRange\":229.95}]}";
printf("Parsing %s \n", str);
json_scanf(str, strlen(str), "{results: [%M]}", &scan_array);
return 0;
}
Вывод:
Parsing {"success":true,"errors":[],"results":[{"productConditionId":3442759,"price":169.54,"lowestRange":155.00,"highestRange":229.95}]}
Parsing array: [{"productConditionId":3442759,"price":169.54,"lowestRange":155.00,"highestRange":229.95}]
Index 0, token {"productConditionId":3442759,"price":169.54,"lowestRange":155.00,"highestRange":229.95}
Price 169.54 : price casted 169