2016-07-23 1 views
0

Ich habe yahoo finance json Datei, von der ich Datum, Schließen und Volumen aus der quote Liste isolieren und speichern Sie es in der gleichen Reihenfolge mit einem Komma Trennung in einer einzigen Textdatei. Das ist mein Json-Skript.Wie speichere ich mit jsoncpp bestimmte Werte in einer Liste in 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(); 

} 


} 

konnte ich die json Werte succed beim Abrufen und drucken root["query"]["count"].asInt() aber wenn ich auf die Liste Werte gehen (quote) Ich weiß nicht, wie durch Zitat (query-> result-> Zitat) iterieren erhalten Datums-, Schluss- und Volumenwerte?

EDIT

auch versucht, diese Methode

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

Es funktioniert nur, wenn die Ausgabe Datum war. Für enge und Lautstärke beendet es mit einer Laufzeitfehlermeldung und auch diesen Fehler

what() type is not convertible to string 
+0

aussehen würde Können Sie klären, welche JSON-Bibliothek Sie verwenden? Welche Bibliothek importieren Sie, die 'Json :: Value' und' Json :: Reader' definiert? Es würde auch hilfreich sein, wenn Sie ein Snippet des JSON-Datensatzes veröffentlichen, auf den Sie zugreifen möchten, damit klar ist, ob es sich um ein JSON-Array oder etwas anderes handelt. –

+1

Wenn ich Ihre bearbeitete zweite Methode ausprobiere, bekomme ich 'what(): Wert ist nicht in float umwandelbar. 'Dies ist sinnvoll, da die Daten für Close und Volume in den verknüpften Beispiel-JSON-Daten als Zeichenfolgen und nicht als numerische Literale dargestellt werden. Es gibt Gründe im Zusammenhang mit Runden, die Sie vielleicht lieber anders analysieren. Wenn doubles in Ordnung sind, sollten Sie in der Lage sein, es aus einer Zeichenfolge mit scanf oder einem Zeichenfolge-Stream zu konvertieren. –

Antwort

1

Sie haben nicht angegeben, welche JSON Bibliothek, die Sie verwenden, und ich weiß nicht, die Yahoo Finanzdaten gut genug, um zu wissen, dass die genaue Feldnamen, aber wenn Sie die JsonCpp Bibliothek verwenden, die Dokumentation hat here, und Sie fragen sich, wie ein JSON-Array iterieren, dann einen Weg, es zu tun Iteratoren mit so etwas wie dieses

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

Danke für den Code nach der geringfügigen Korrektur, auch zeigt es kein Ergebnis 'Json :: Wert quote = root [" query "] [" result "] [" quote "]; für (Json :: ValueIterator itr = Zitat.begin(); itr! = Quote.end(); itr ++) { Json :: Wert Datum = (* itr) ["Datum"]; Json :: Wert close = (* itr) ["Close"]; Json :: Wert Volumen = (* itr) ["Volumen"]; std :: cout << "\ nDatum \ n" << date.asString() << std :: endl; } ' – Eka

+0

Ich hatte den Code zuvor nicht kompiliert, aber ich ging auf die Arbeit des Kompilierens aufgrund Ihres Kommentars. Die Antwort zeigt nun den Code, den ich mit dem JsonCpp-Code und den Daten, die im yahoo finance json-Link angezeigt werden, zusammengestellt und getestet habe. –

Verwandte Themen