0

我正在使用cJSON 库。对于带有 JSON 的正文示例请求,如下所示:

{
  "user": {
    "name":"user name",
    "city":"user city"  
  }  
}

我添加这样的对象及其工作:

cJSON *root;
cJSON *user;

root = cJSON_CreateObject();
cJSON_AddItemToObject(root,"user", user = cJson_CreateObject());
cJSON_AddStringToObject(user, "name", name.c_str());
cJSON_AddStringToObject(user, "city", city.c_str());

但现在我有一个身体 json 有点不同:

{
  "user": {
    "informations:"{
        "name1":"user name1",
        "name2":"user name 2"
    }
  }  
}

并尝试添加这样的对象:

cJSON *root;
cJSON *user;
cJSON *info;

root = cJSON_CreateObject();
cJSON_AddItemToObject(root,"user", user = cJson_CreateObject());
cJSON_AddItemToObject(user,"informations", info = cJson_CreateObject());
cJSON_AddStringToObject(info, "name", name.c_str());
cJSON_AddStringToObject(info, "city", city.c_str());

使用 cJSON 执行此操作的正确方法是什么?因为它不起作用,而且我不知道问题出在我的 C++ 中还是在将数据发送到我的 C++ 服务器的 Java 客户端中。

4

2 回答 2

1

尽管您没有指定为什么您的代码不起作用,下面的代码应该生成您提供的示例。

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

int main() {
  cJSON *root;
  cJSON *user;
  cJSON *info;

  std::string name1 = "user name1";
  std::string name2 = "user name 2";

  root = cJSON_CreateObject();
  cJSON_AddItemToObject(root,"user", user = cJSON_CreateObject());
  cJSON_AddItemToObject(user,"informations", info = cJSON_CreateObject());
  cJSON_AddStringToObject(info, "name1", name1.c_str());
  cJSON_AddStringToObject(info, "name2", name2.c_str());

  std::cout << cJSON_Print(root) << std::endl;
  return 0;
}

cJSON 文档看起来非常简单,您的代码看起来一般都很好。cJSON 源代码中还有一个“test.c”文件,您可以在其中找到更多如何使用它的代码示例。

于 2017-04-07T08:56:10.447 回答
0

这段代码看起来不错。注意客户端和服务器端的 CJSON 库版本是否一致。旧CJSON库和新CJSON库的数据结构变化可能会导致这个问题

old: 在此处输入图片描述 如下:

#define cJSON_String 4

新增: 在此处输入图片描述 如下:

#define cJSON_String (1 << 4)
于 2020-07-23T08:09:13.490 回答