JSON-разбор с использованием C - PullRequest
0 голосов
/ 26 февраля 2019

Я знаю, что это, казалось бы, простая тема, которая обсуждалась миллион раз, но я очень застрял в следующих примерах.Но я изо всех сил стараюсь следить за множеством примеров в Интернете, и я просмотрел многие из них.В настоящее время у меня есть файл JSON, из которого я пытаюсь извлечь значение «цена», но каждый пример, которому я пытался следовать, застрял и запутался, так что это мое последнее средство.

{"success":true,"errors":[],"results":[{"productConditionId":3442759,"price":169.54,"lowestRange":155.00,"highestRange":229.95}]}

ИЗОБРАЖЕНИЕ ФАЙЛА JSON

Я бы хотел иметь цену "168,54" в виде целого числа, которое я могу назначить переменной.

1 Ответ

0 голосов
/ 26 февраля 2019

Проверьте замороженную библиотеку 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...