cJSON построить массив? - PullRequest
       13

cJSON построить массив?

0 голосов
/ 26 апреля 2018

Ну, я новичок в cJSON.Я хочу построить данные в формате JSON, например:


    {
        "parmas": {
            "name":"testbox",
            "box1":[0,0],
            "box2":[2,2]
        }
    }

Итак, как мне реализовать это с исходным кодом cJson.c & cJson.h?

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете сделать это следующим образом:

#include <cjson/cJSON.h>
#include <stdlib.h>
#include <stdio.h>

cJSON *create_point(double x, double y) {
    cJSON *point = cJSON_CreateArray();
    if (point == NULL) {
        goto fail;
    }

    cJSON *x_json = cJSON_CreateNumber(x);
    if (x_json == NULL) {
        goto fail;
    }
    cJSON_AddItemToArray(point, x_json);

    cJSON *y_json = cJSON_CreateNumber(y);
    if (y_json == NULL) {
        goto fail;
    }
    cJSON_AddItemToArray(point, y_json);

    return point;

fail:
    cJSON_Delete(point);
    return NULL;
}

cJSON *create_box() {
    cJSON *box = cJSON_CreateObject();
    if (box == NULL) {
        goto fail;
    }

    cJSON *params = cJSON_CreateObject();
    if (params == NULL) {
        goto fail;
    }
    cJSON_AddItemToObject(box, "params", params);

    cJSON *name = cJSON_CreateString("testbox");
    if (name == NULL) {
        goto fail;
    }
    cJSON_AddItemToObject(params, "name", name);

    cJSON *box1 = create_point(0, 0);
    if (box1 == NULL) {
        goto fail;
    }
    cJSON_AddItemToObject(params, "box1", box1);

    cJSON *box2 = create_point(2, 2);
    if (box2 == NULL) {
        goto fail;
    }
    cJSON_AddItemToObject(params, "box2", box2);

    return box;

fail:
    cJSON_Delete(box);
    return NULL;
}

int main() {
    int status = EXIT_SUCCESS;
    char *json = NULL;
    cJSON *box = create_box();
    if (box == NULL) {
        goto fail;
    }

    json = cJSON_Print(box);
    if (json == NULL) {
        goto fail;
    }

    printf("%s\n", json);

    goto cleanup;

fail:
    status = EXIT_FAILURE;
cleanup:
    cJSON_Delete(box);
    if (json != NULL) {
        free(json);
    }

    return status;
}

Также, пожалуйста, прочитайте мою документацию , чтобы понять, как она работает и как ее можно использовать.

...