C ++ REST(卡萨布兰卡) - 阅读JSON

时间:2016-08-10 08:29:30

标签: c++ json rest casablanca

我正在尝试使用C ++ REST API 我用下面的方式写信给json。

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的新手

1 个答案:

答案 0 :(得分: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”的java脚本对象,...“11005”,不是数组。因此,如果您想获得财产的价值,您必须使用属性名称:

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

因为当你使用整数索引时,json :: value :: operator []假设你想访问数组元素。以下是详细信息https://microsoft.github.io/cpprestsdk/classweb_1_1json_1_1value.html#a56c751a1c22d14b85b7f41a724100e22

<强>已更新

如果你不知道收到的对象的属性,你可以调用值:: as_object方法(https://microsoft.github.io/cpprestsdk/classweb_1_1json_1_1value.html#a732030bdee11c2f054299a0fb148df0e)来获取JSON对象,之后你可以使用specilized interface来遍历带有begin和的字段。结束迭代器:https://microsoft.github.io/cpprestsdk/classweb_1_1json_1_1object.html#details