2017-03-10 4 views
5

Mit der serde_json Kiste, ichgenerieren ziemlich (eingekerbt) JSON mit serde

::serde_json::to_string(&obj) 

serialisiert ein Objekt in einen JSON-String verwenden kann. Der resultierende JSON verwendet kompakte Formatierung wie:

{"foo":1,"bar":2} 

Aber wie erzeuge ich hübsch/eingerückt JSON? Zum Beispiel würde Ich mag dies bekommen:

{ 
    "foo": 1, 
    "bar": 2 
} 

Antwort

5

Verwenden Sie die to_string_pretty Funktion gegliedertes JSON zu erhalten:

::serde_json::to_string_pretty(&obj) 
+0

Gibt es eine Möglichkeit, den Einzug festzulegen? Standardmäßig scheint es 2 Leerzeichen zu sein. – pietrovismara

0

Die serde_json::to_string_pretty Funktion generiert ziemlich druckten gegliederte JSON.

Dieser Ansatz verwendet standardmäßig 2 Leerzeichen, was Ihrer Frage entspricht. Sie können den Einzug mithilfe von PrettyFormatter::with_indent anpassen.

#[macro_use] 
extern crate serde_json; 

extern crate serde; 
use serde::Serialize; 

fn main() { 
    let obj = json!({"foo":1,"bar":2}); 

    let buf = Vec::new(); 
    let formatter = serde_json::ser::PrettyFormatter::with_indent(b" "); 
    let mut ser = serde_json::Serializer::with_formatter(buf, formatter); 
    obj.serialize(&mut ser).unwrap(); 
    println!("{}", String::from_utf8(ser.into_inner()).unwrap()); 
}