Как мы можем добавить новый элемент в проанализированный JSON с cJSON? - PullRequest
2 голосов
/ 10 января 2020

Я программирую сервер для своего клиента, который хранит сообщения. Я сохраняю их в формате JSON, используя cJSON от Dave Gambler, и сохраняю их в текстовом файле. Как я могу добавить новый элемент в мой массив после чтения строки из файла и анализа ее? Строка JSON выглядит следующим образом:

{"messages": [{"sender": "SERVER", "message": "Channel Created"}, {"sender": "Will "," message ":" Привет, друзья! " }]}

1 Ответ

1 голос
/ 10 января 2020

После анализа вашей строки json вам необходимо создать новый объект, содержащий ваше новое сообщение, и добавить объект в существующий массив.

#include <stdio.h>
#include "cJSON.h"

int main()
{
    cJSON *msg_array, *item;
    cJSON *messages = cJSON_Parse(
        "{ \"messages\":[ \
         { \"sender\":\"SERVER\", \"message\":\"Channel Created\" }, \
         { \"sender\":\"Will\", \"message\":\"Hello Buddies!\" } ] }");
    if (!messages) {
        printf("Error before: [%s]\n", cJSON_GetErrorPtr());
    }
    msg_array = cJSON_GetObjectItem(messages, "messages");

    // Create a new array item and add sender and message
    item = cJSON_CreateObject();
    cJSON_AddItemToObject(item, "sender", cJSON_CreateString("new sender"));
    cJSON_AddItemToObject(item, "message", cJSON_CreateString("new message"));

    // insert the new message into the existing array
    cJSON_AddItemToArray(msg_array, item);

    printf("%s\n", cJSON_Print(messages));
    cJSON_Delete(messages);

    return 0;
}
...