2016-07-23 1 views
0

quoteリストから日付、クローズ、ボリュームを分離して、カンマ区切りで1つのテキストファイルに保存したいファイルがあるyahoo finance jsonファイルを持っています。これは私のjsonスクリプトです。jsoncppを使ってリスト内の特定の値をtxtに保存する方法は?

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()を取り出すにsuccedすることができましたが、私はリスト値(quote)に行くとき、私は引用符(query-> result->引用符)を反復処理する方法を知らない取得します日付、クローズ、ボリュームの値は?

EDIT

はまた、出力は日だった場合にのみ機能します

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; 
} 

この方法を試してみました。近いと音量出力の場合、それはあなたが使用しているJSONライブラリ指定していない、と私は知って十分ヤフーファイナンスのデータを知らないランタイムエラーメッセージが表示され、また、このエラー

what() type is not convertible to string 
+0

のようになります。使用しているJSONライブラリを明確にすることはできますか? 'Json :: Value'と' Json :: Reader'を定義しているライブラリはどれですか?アクセスしようとしているJSONレコードのスニペットを投稿して、JSON配列かそれ以外のものかを明確にするのに役立ちます。 –

+1

編集した2番目のメソッドを試してみると、 'what:):値がfloatに変換できません.'これは、リンクされたサンプルJSONデータの数値リテラルではなく、CloseとVolumeのデータが文字列として表示されるので意味があります。丸めに関連する理由は、別の方法で解析することをお勧めします。 doubleが大丈夫なら、scanfや文字列を使って文字列から変換することができます。 –

答えて

1

で終了します正確なフィールド名が、あなたがドキュメントhereを持ってJsonCppライブラリを使用している、とあなたは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; 
} 
+0

小修正後のコードもありがとうございます.Json :: Value quote = root ["query"] ["result"] ["quote"]; (Json :: ValueIterator itr = quote.begin(); itr!= quote.end(); itr ++) { Json :: Value date =(* itr)["Date"]; Json :: Value close =(* itr)["閉じる"]; Json :: Value volume =(* itr)["Volume"]; std :: cout << "\ n日付\ n" << date.asString()<< std :: endl; } ' – Eka

+0

私は以前にコードをコンパイルしていませんでしたが、あなたのコメントのためにコンパイルする作業に行きました。答えは、あなたが提供したyahoo finance jsonリンクに表示されているJsonCppコードとデータでコンパイルしてテストしたコードを示しています。 –

関連する問題