Работа с JSON в языке программирования С
JSON (JavaScript Object Notation) - это легковесный формат для обмена данными. Он широко используется веб-приложениями для передачи данных с сервера на клиент, а также между различными сервисами и приложениями.
JSON представляет собой набор пар "ключ-значение", где каждый ключ представляет собой строку, а значение может быть любым из следующих типов данных: строка, число, логическое значение (true или false), null, объект или массив объектов.
Пример JSON-объекта:
{
"name": "John Doe",
"age": 30,
"isStudent": true,
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA"
},
"phones": [
{
"type": "home",
"number": "555-1111"
},
{
"type": "work",
"number": "555-2222"
}
]
}
В этом примере объект представляет человека с именем John Doe, возрастом 30 лет, который является студентом, имеет адрес и два номера телефона разных типов.
Для работы с JSON-данными в языке программирования C существуют различные библиотеки. Одна из наиболее популярных - это cJSON.
Пример кода на C с использованием библиотеки cJSON для чтения JSON-данных из файла:
#include
#include "cJSON.h"
int main(void) {
FILE *file = fopen("data.json", "rb"); // открытие файла
if (!file) {
printf("Error opening file\n");
return 1;
}
fseek(file, 0, SEEK_END); // перемещение к концу файла
long size = ftell(file); // определение размера файла
fseek(file, 0, SEEK_SET); // перемещение в начало файла
char *buffer = (char*)malloc(size + 1); // выделение достаточного размера буфера для чтения содержимого файла
fread(buffer, 1, size, file); // чтение данных из файла в буфер
fclose(file);
buffer[size] = '\0'; // завершение буфера нулевым символом для представления строки
cJSON *root = cJSON_Parse(buffer); // парсинг JSON-строки в структуру cJSON
if (!root) {
printf("Error parsing JSON\n");
free(buffer);
return 1;
}
cJSON *name = cJSON_GetObjectItem(root, "name"); // получение значения свойства "name"
if (name && name->valuestring) {
printf("Name: %s\n", name->valuestring);
}
cJSON *isStudent = cJSON_GetObjectItem(root, "isStudent"); // получение значения свойства "isStudent"
if (isStudent && cJSON_IsBool(isStudent)) {
printf("Is student: %s\n", cJSON_IsTrue(isStudent) ? "true" : "false");
}
cJSON_Delete(root); // освобождение памяти, выделенной под структуру cJSON
free(buffer); // освобождение памяти, выделенной под буфер
return 0;
}
Этот код открывает файл с именем data.json, читает его содержимое в буфер, парсит JSON-строку в структуру cJSON и выводит значения свойств "name" и "isStudent". По завершении работы освобождает выделенную память.
Кроме чтения JSON-данных, библиотека cJSON также позволяет создавать и изменять JSON-объекты с помощью соответствующих функций. Например, для создания нового объекта можно использовать функцию cJSON_CreateObject(), для добавления нового свойства - cJSON_AddItemToObject(). Однако, подробнее об этих функциях и других возможностях библиотеки можно узнать из ее документации.