Wie bekomme ich JSONCPP -Werte als Zeichenfolgen?
Frage
Ich analysiere JSON -Daten mithilfe JSONCPP. Ich muss die Daten nicht wirklich verstehen, ich muss nur einige Eigenschaften und ihre Werte ausdrucken. Es ist irgendwie schwer zu tun. Zuerst muss ich wissen, welcher Typ der Wert ist, und dann den Wert abrufen und dann wieder in die Zeichenfolge konvertieren! Es gibt einen gestalteten Schriftsteller, aber ich möchte ihn nicht verwenden, da er am Ende einige CRLF angehört.
Ich mache so etwas
CJsonHelper::getUInt(Json::Value &root, std::string key){
return root.get(key, 0-1).isInt() ? root.get(key, 0-1).asUInt() : 0-1;
}
Könnte ich nur eine einzige Funktion schreiben, um alle Eigenschaften mit genau dieser Funktion zu erhalten, die sich nicht wirklich um die Typen usw. kümmert?
Lösung
Sie können trivial Ihren eigenen Schriftsteller erstellen, der alles tut, was Sie wollen. Sich den Code ansehen StyledWriter
. Die CRLFs, von denen Sie nicht mögen StyledWriter::Write
. Sie können Ihre eigene Schriftstellungsklasse erstellen, die nicht über diese CRLFs verfügt.
Wenn es Ihnen nichts ausmacht, die Bibliothek zu ändern, ändern Sie den Schriftsteller, damit funktioniert writeValue
sind eher geschützt als privat. Dann können Sie Ihre eigene Klasse abgeben StyledWriter
mit einem anderen Write
Funktion und trotzdem die verschiedenen verwenden write*
Funktionen, um die Details der Konvertierung auszuführen.
Andere Tipps
Das Projekt ist zugezogen Github.
Verwenden Sie a, um alle Linefeeds zu vermeiden StreamwriterBuilder:
Json::Value whatever = ...;
Json::StreamWriterBuilder builder;
builder.settings_["indentation"] = "";
std::string out = Json::writeString(builder, whatever);