Как разобрать json с помощью sscanf в C? - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть следующая строка в виде json:

{"num": 1, "data": {"city": "delhi"}}

I необходимо получить значение ключа "num", используя sscanf. Вот моя попытка. Я знаю, что это неправильно. Но я не знаю, как это сделать.

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    char *str = "{\"num\":1,\"data\":{\"city\":\"delhi\"}}";
    char *ret = malloc(sizeof(char) * 10);

    sscanf(str, "{\"num\":%s, %s" , ret);

    printf("%s", ret);
    return 0;
}

Есть предложения?

1 Ответ

3 голосов
/ 24 апреля 2020
sscanf(str, "{\"num\":%s, %s" , ret);

неверно, сначала у вас есть два "% s", но вы указываете только одну ячейку для сохранения строки ( ret ), и она не извлекается так, как вы ожидаете

Вы хотите

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    char *str = "{\"num\":1,\"data\":{\"city\":\"delhi\"}}";
    char *ret = malloc(10); /* by definition sizeof(char) is 1 */

    if (sscanf(str, "{\"num\":%9[^,]" , ret) == 1)
        printf("value is '%s'\n", ret);

    free(ret);
    return 0;
}

Компиляция и выполнение

/tmp % gcc -Wall p.c
/tmp % ./a.out
value is '1'
/tmp % 

, но использование scanf для анализа ограничено

...