私はこのボディ要求例えば有する:私は1つ私はuserIdを有するstd::list<UsersId>* VUsers
(「123」は、この場合と「1234」)を受信する前たとえばJSON配列++
{
"users": [{
"userId": 123
}, {
"userId": 1234
}]
}
を、cJSON array
を作成します私のリストを繰り返し、すべてのuserIdを取得します。 (注意:UsersId
は、私が使用して1つのAUXILIARクラスで、コンストラクタで1 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;
}
しかし、私は同じにしたい知っているが、よりシンプル/簡単に作成し、このような何かに体の要求を変更する必要があります:私はこのCを使用してい
{
"users": {
"userId": [123, 1234]
}
}
++ライブラリ - >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を解析する必要があります。だから私はusersオブジェクトに移動し、usersId配列内のすべての値を(おそらくいくつかの反復で)取得し、他のリスト内のすべての値を保存する(std :: list * users = new std :: list ();) –
Pik93
パート2で見たように、同じ名前(userId)で2つの変数が定義されています。 –