如何使用 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;
}