我有本机构请求示例:JSON阵列具有多个值C++
{
"users": [{
"userId": 123
}, {
"userId": 1234
}]
}
对于前面的示例我接收一个std::list<UsersId>* VUsers
具有我的用户ID(在此情况下“123”和“1234”),创建cJSON array
,重复我的列表并获取所有userId。 (注:UsersId
是我使用和接收构造一个int
一个附配类)
cJSON* cJsonUsers = cJSON_CreateArray();
cJSON_AddItemToObject(root, "VUsers", cJsonUsers);
std::list<UsersId>::const_iterator itUsers = VUsers->begin();
while (itUsers != VUsers->end())
{
cJSON *cJsonVNode = cJSON_CreateObject();
cJSON_AddItemToArray(cJsonUsers, cJsonUser);
cJSON_AddNumberToObject(cJsonUser, "userId", itUsers->userId);
++itVNodes;
}
但要知道我想的一样,但使更多的简单/容易,需要对身体的要求改变这样的事情:
{
"users": {
"userId": [123, 1234]
}
}
我使用这个C++库 - >https://github.com/DaveGamble/cJSON,但我不明白怎么做才能实现我需要的修改。
EDIT 2(解析JSON)
cJSON* cJsonUsers = cJSON_GetObjectItem(root, "users");
if (!cJsonUsers) return 0;
if (cJsonUsers->type != cJSON_Array) return 0;
std::list<VUserId>* users = new std::list<VUserId>();
cJSON* cJsonVUser;
cJSON_ArrayForEach(cJsonVUser, cJsonUsers)
{
cJSON* cJsonVUserId = cJSON_GetObjectItem(cJsonVUser, "userId");
if (!cJsonVUserId) continue;
int user_id = cJsonVUserId->valueint;
VUserId userId(user_id);
users->push_back(userId);
}
请尝试更精确。 *“我不知道如何去实施修改”*不是一个足够的问题描述。它不会编译?如果没有,哪一行失败,错误信息是什么?或者它不会产生正确的输出?如果不是,测试输入是什么,期望的输出是什么,实际输出是什么? –
我了解代码(即其他用户放),我实现这部分。现在我有其他部分(编辑2是修改主体请求后的代码),我需要解析json。所以我需要去用户对象,并获取usersId数组内的所有值(可能有一些迭代),并将所有值保存在其他列表中(std :: list * users = new std :: list ();) –
Pik93
从我在第2部分看到的,两个变量是用相同的名称(userId)定义的。 –