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, "error: on line %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, незважаючи на початкову відсутність C у прямій підтримці маніпуляцій з JSON. Ранні рішення включали в себе ручну маніпуляцію рядками - схильну до помилок і неефективну. Бібліотеки, такі як jansson
та json-c
, з’явилися, щоб заповнити цей пробіл, надаючи міцні API для парсингу JSON, його створення та серіалізації.
Хоча jansson
пропонує простоту та легкість використання, json-c
може зацікавити тих, хто шукає більший набір функцій. Тим не менш, альтернативи, такі як бібліотеки парсингу в C++, пропонують більш складні абстракції завдяки складнішим структурам даних цієї мови та підтримці стандартної бібліотеки. Однак, коли працюють в середовищах, де C є переважною або необхідною мовою - наприклад, в системах на мікроконтролерах або при інтерфейсі з існуючими бібліотеками C - використання jansson
або json-c
стає незамінним.
Також варто вказати, що робота з JSON у C вимагає глибшого розуміння управління пам’яттю, оскільки ці бібліотеки часто повертають динамічно розподілені об’єкти, які вимагають явного звільнення. Це викликає у програмістів виклик знайти баланс між зручністю та відповідальністю уникнення витоків пам’яті, критично важливого аспекту створення ефективного коду на C.