C:
Работа с JSON

Как это сделать:

Для работы с JSON на C обычно используются библиотеки, такие как jansson или json-c, из-за отсутствия встроенной поддержки JSON в C. Здесь мы сосредоточимся на jansson из-за её простоты использования и активного обслуживания. Сначала установите библиотеку (например, с помощью менеджера пакетов apt на Ubuntu: sudo apt-get install libjansson-dev).

Начнем с разбора строки JSON и доступа к её содержимому:

#include <jansson.h>
#include <stdio.h>

int main() {
    const char *json_string = "{\"name\":\"John Doe\",\"age\":30}";
    json_error_t error;
    json_t *root = json_loads(json_string, 0, &error);
    
    if(!root) {
        fprintf(stderr, "ошибка: в строке %d: %s\n", error.line, error.text);
        return 1;
    }
    
    const char *name;
    int age;
    json_unpack(root, "{s:s, s:i}", "name", &name, "age", &age);
    
    printf("Имя: %s\nВозраст: %d\n", name, age);
    
    json_decref(root);
    return 0;
}

Пример вывода:

Имя: John Doe
Возраст: 30

Далее, создание и вывод объекта JSON:

#include <jansson.h>
#include <stdio.h>

int main() {
    json_t *root = json_object();
    json_object_set_new(root, "name", json_string("Jane Doe"));
    json_object_set_new(root, "age", json_integer(25));
    
    char *json_dump = json_dumps(root, JSON_ENCODE_ANY);
    printf("%s\n", json_dump);
    
    free(json_dump);
    json_decref(root);
    return 0;
}

Пример вывода:

{"name": "Jane Doe", "age": 25}

Эти примеры демонстрируют основы загрузки строки JSON, извлечения её значений, создания нового объекта JSON, а затем вывода его в виде строки.

Углубление

Необходимость работы с JSON на C возникает из-за принятия вебом JSON в качестве основного формата для обмена данными. Простота и эффективность JSON быстро сделали его более предпочтительным, чем XML, несмотря на изначальное отсутствие прямой поддержки работы с JSON в C. Ранние решения включали в себя ручную манипуляцию строками - склонную к ошибкам и неэффективную. Библиотеки, такие как jansson и json-c, появились, чтобы заполнить этот пробел, предоставляя надежные API для разбора, создания и сериализации JSON.

Хотя jansson предлагает простоту и удобство использования, json-c может привлечь тех, кто ищет более широкий набор функций. Тем не менее, альтернативы, такие как библиотеки разбора на C++, предлагают более сложные абстракции благодаря более комплексным структурам данных и поддержке стандартной библиотеки этого языка. Однако, когда работа ведется в средах, где C является предпочтительным или необходимым языком - например, во встроенных системах или при взаимодействии с существующими библиотеками на C - использование jansson или json-c становится незаменимым.

Также стоит отметить, что работа с JSON на C требует более глубокого понимания управления памятью, поскольку эти библиотеки часто возвращают динамически выделенные объекты, требующие явного освобождения. Это ставит перед программистами задачу совместить удобство с ответственностью за предотвращение утечек памяти, ключевым аспектом создания эффективного кода на C.