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?

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top