我有本機構請求示例: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)定義的。 –