2011-09-26 22 views
9

Sto usando jsoncpp e sto riscontrando un problema con il modo in cui i messaggi JSON vengono formattati quando vengono scritti usando uno dei writer.problemi di formattazione jsoncpp

Ad esempio:

root["name"] = "monkey"; 
std::cout << writer.write(root) << "\n"; 

mi dà qualcosa di simile formattato

{ 
    "name" : "monkey" 
} 

Mentre Io in realtà voglio:

{"name":"monkey"} 

Ho guardato la documentazione e ci sono menzioni di setIndentLength() ma non appaiono nei file sorgente, quindi forse sono deprecato o qualcosa.

In ogni caso, qualcuno sa come farlo?

+0

Dovresti averci mostrato che cosa era "writer". L'indizio è nel suo tipo. –

risposta

5

Se si utilizza Jsoncpp versione 1.1, è possibile utilizzare al posto di Json::FastWriterJson::StyledWriter o Json::Writer:

Il documento JSON è scritto in una sola riga. Non è inteso per il consumo "umano" di , ma può essere utile per supportare funzionalità come RPC in cui la larghezza di banda è limitata.

+0

Ho jsoncpp 1.8.3 come potrei tornare a verson 1.1? @deepmax – Alper

2

FastWriter, StyledWriter, StyledStreamWriter, e Writer sono deprecated. Utilizzare StreamWriterBuilder, che crea un StreamWriter con un'API leggermente diversa. Usarlo in questo modo:

Json::StreamWriterBuilder builder; 
builder.settings_["indentation"] = ""; 
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter()); 
writer->write(root, &std::cout); 
+0

Perché 'settings' ha un carattere di sottolineatura finale? :( –

+0

@LightnessRacesinOrbit è il nome del membro della classe (vedi http://open-source-parsers.github.io/jsoncpp-docs/doxygen/class_json_1_1_stream_writer_builder.html) – mpromonet

+0

@mpromonet: Sì, lo capisco. Perché lo fa avere un trattino basso? È piuttosto strano per un'interfaccia pubblica, IMO –

1

Come estensione della risposta di cdunn2001, non v'è alcuna necessità di ri-scrittura impostazioni di default (.settings_). Puoi semplicemente sostituire il valore "indentazione" del costruttore StreamWriterBuilder:

Json::Value json = ... 
Json::StreamWriterBuilder builder; 
builder["commentStyle"] = "None"; 
builder["indentation"] = ""; //The JSON document is written in a single line 
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter()); 
writer->write(json, &std::cout); 
+0

spieghi un po 'questa risposta. le risposte al solo codice non hanno molto valore. grazie! Mantenere il buon lavoro! –

+0

@progressive_overload grazie in anticipo. Aggiunto qualche spiegazione. – Ramiro