1

以下の方法でjsonに書いたC++ REST APIを試してみました。

json::value resp;
std::vector<Portfolio> portfolio;
// Populate portfolio
this->PortfolioList(usrStr, pwdStr, portfolio);
std::vector<Portfolio>::iterator it;
for (it = portfolio.begin(); it != portfolio.end(); it++)
{
    char costBuff[40]; _itoa_s(it->GetTotalCost(), costBuff, 10);
    char qtyBuff[40]; _itoa_s(it->GetQuantity(), qtyBuff, 10);

    json::value portfolioEntry;
    portfolioEntry[U("username")] = json::value::string(utility::conversions::to_string_t(it->GetUserName()));
    portfolioEntry[U("stockCode")] = json::value::string(utility::conversions::to_string_t(it->GetStockCode()));
    portfolioEntry[U("quantity")] = json::value::string(utility::conversions::to_string_t(qtyBuff));
    portfolioEntry[U("totalcost")] = json::value::string(utility::conversions::to_string_t(costBuff));

    resp[utility::conversions::to_string_t(it->GetStockCode())] = portfolioEntry;
}

このために、以下のような出力を得ました

{
 "11002":{"quantity":11002,"totalcost":"272","username":"arunavk"},
 "11003":{"quantity":11003,"totalcost":"18700","username":"arunavk"},
 "11004":{"quantity":11004,"totalcost":"760","username":"arunavk"},
 "11005":{"quantity":11005,"totalcost":"32","username":"arunavk"}
}

さて、受信側で、以下のように読んでみました

for (int i = 0; i < size; i++)
{
    table->elementAt(i, 0)->addWidget(new Wt::WText(this->response[i][0].as_string()));
    table->elementAt(i, 1)->addWidget(new Wt::WText(this->response[i][1].as_string()));
    table->elementAt(i, 2)->addWidget(new Wt::WText(this->response[i][2].as_string()));
    table->elementAt(i, 3)->addWidget(new Wt::WText(this->response[i][3].as_string()));
} 

しかし、それは失敗します。何が欠けていますか?

申し訳ありませんが、私はこの REST とカサブランカと JSON を初めて使用します

4

1 に答える 1

2

JSON の観点からは、次のようになります。

{
 "11002":{"quantity":11002,"totalcost":"272","username":"arunavk"},
 "11003":{"quantity":11003,"totalcost":"18700","username":"arunavk"},
 "11004":{"quantity":11004,"totalcost":"760","username":"arunavk"},
 "11005":{"quantity":11005,"totalcost":"32","username":"arunavk"}
}

プロパティ "11002"、... "11005" を持つ Java スクリプト オブジェクトです。配列ではありません。したがって、プロパティの値を取得する場合は、プロパティ名を使用する必要があります。

this->response["11002"]["quantity"]

整数インデックスを使用すると、 json::value::operator [] は配列要素にアクセスすることを想定しているためです。詳細はこちらhttps://microsoft.github.io/cpprestsdk/classweb_1_1json_1_1value.html#a56c751a1c22d14b85b7f41a724100e22

更新しました

受け取ったオブジェクトのプロパティがわからない場合は、value::as_object メソッド ( https://microsoft.github.io/cpprestsdk/classweb_1_1json_1_1value.html#a732030bdee11c2f054299a0fb148df0e ) を呼び出して JSON オブジェクトを取得し、その後、specilized を使用できます。開始イテレータと終了イテレータを使用してフィールドを反復処理するためのインターフェイス: https://microsoft.github.io/cpprestsdk/classweb_1_1json_1_1object.html#details

于 2016-08-10T08:40:07.320 に答える