2016-01-27 11 views
5

Kennt jemand einen Weg, um moshi eine mehrzeilige json mit Vertiefung (für den menschlichen Verzehr im Rahmen eines config.json) so von zu produzieren:json Formatierung mit moshi

{"max_additional_random_time_between_checks":180,"min_time_between_checks":60} 

etwas dies wie:

{ 
    "max_additional_random_time_between_checks":180, 
    "min_time_between_checks":60 
} 

ich kenne andere json-writer-Implementierungen so tun kann - aber ich würde bleiben wie hier für Konsistenz

Antwort

3

nach Moshi Wenn Sie mit ser umgehen können ializing das Objekt selbst, sollte dies den Trick:

import com.squareup.moshi.JsonWriter; 
import com.squareup.moshi.Moshi; 

import java.io.IOException; 

import okio.Buffer; 

public class MoshiPrettyPrintingTest { 

    private static class Dude { 
     public final String firstName = "Jeff"; 
     public final String lastName = "Lebowski"; 
    } 

    public static void main(String[] args) throws IOException { 

     final Moshi moshi = new Moshi.Builder().build(); 

     final Buffer buffer = new Buffer(); 
     final JsonWriter jsonWriter = JsonWriter.of(buffer); 

     // This is the important part: 
     // - by default this is `null`, resulting in no pretty printing 
     // - setting it to some value, will indent each level with this String 
     // NOTE: You should probably only use whitespace here... 
     jsonWriter.setIndent(" "); 

     moshi.adapter(Dude.class).toJson(jsonWriter, new Dude()); 

     final String json = buffer.readUtf8(); 

     System.out.println(json); 
    } 
} 

Diese Drucke:

{ 
    "firstName": "Jeff", 
    "lastName": "Lebowski" 
} 

prettyPrintObject() in this test file und der source code of BufferedSinkJsonWriter See.

Allerdings habe ich noch nicht herausgefunden, ob und wie es möglich ist, dies zu tun, wenn Sie Moshi mit Retrofit verwenden.

+0

Vielen Dank! Genau das, was ich gesucht habe und dachte, dass dies mit Moshi nicht möglich ist, da dies für diese Lib nicht möglich ist - glücklich überrascht, dass es diesen Weg gibt! – ligi

4

Jetzt können Sie .indent(" ") Methode auf Adapter für die Formatierung verwenden.

final Moshi moshi = new Moshi.Builder().build(); 
String json = moshi.adapter(Dude.class).indent(" ").toJson(new Dude()) 
+0

Schön - danke für das Follow-up – ligi