我有yahoo finance json文件,我希望从quote
列表中隔离日期,关闭和音量,并在单个文本文件中以逗号分隔的相同顺序保存。这是我的json脚本。
Json::Value root; // will contains the root value after parsing.
Json::Reader reader;
bool parsingSuccessful = reader.parse( YahooJson, root );
if(not parsingSuccessful)
{
// Report failures and their locations
// in the document.
std::cout<<"Failed to parse JSON"<<std::endl
<<reader.getFormatedErrorMessages()
<<std::endl;
return 1;
}else{
std::cout<<"\nSucess parsing json\n"<<std::endl;
std::cout << root<< std::endl;
std::cout <<"No of Days = "<< root["query"]["count"].asInt() << std::endl;
//below for loop returns an error
for (auto itr : root["query"]["result"]["quote"]) {
std::string val = itr.asString();
}
}
我能够成功获取json值并打印root["query"]["count"].asInt()
但是当我转到列表值(quote
)时,我不知道如何遍历引号(query-&gt; result- &gt;引用)获取日期,收盘价和交易量值?
修改
也试过这个方法
const Json::Value& quotes = root["query"]["results"]["quote"];
for (int i = 0; i < quotes.size(); i++){
std::cout << " Date: " << quotes[i]["Date"].asString();
std::cout << " Close: " << quotes[i]["Close"].asFloat();
std::cout << " Volume: " << quotes[i]["Volume"].asFloat();
std::cout << std::endl;
}
仅在输出为Date时才有效。对于close和volume输出,它会以运行时错误消息退出,也会出现此错误
what() type is not convertible to string
答案 0 :(得分:1)
您还没有指定您正在使用哪个JSON库,而且我不太了解Yahoo财务数据以了解确切的字段名称,但是如果您使用的是具有文档的JsonCpp库here,你问的是如何迭代JSON数组,那么使用迭代器的方法就是这样的
const Json::Value quote = root["query"]["results"]["quote"];
for (Json::ValueConstIterator itr = quote.begin(); itr != quote.end(); ++itr)
{
const Json::Value date = (*itr)["Date"];
const Json::Value close = (*itr)["Close"];
const Json::Value volume = (*itr)["Volume"];
std::cout << "Date: " << date.asString() << std::endl;
std::cout << "Close: " << close.asString() << std::endl;
std::cout << "Volume: " << volume.asString() << std::endl;
}