如何使用 jsoncpp 将列表中的特定值保存到 txt?
How to save specific values in a list to txt using jsoncpp?
我有 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->result->quote) 获取日期、收盘价和交易量值?
编辑
也试过这个方法
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;
}
仅当输出为日期时有效。对于关闭和音量输出,它退出时会出现运行时错误消息以及此错误
what() type is not convertible to string
你没有指定你正在使用哪个 JSON 库,我对雅虎金融数据的了解还不够深,无法知道确切的字段名称,但如果你使用的是 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;
}
我有 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->result->quote) 获取日期、收盘价和交易量值?
编辑
也试过这个方法
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;
}
仅当输出为日期时有效。对于关闭和音量输出,它退出时会出现运行时错误消息以及此错误
what() type is not convertible to string
你没有指定你正在使用哪个 JSON 库,我对雅虎金融数据的了解还不够深,无法知道确切的字段名称,但如果你使用的是 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;
}