2016-01-27 12 views
5

Qualcuno sa un modo per ottenere Moshi per produrre un JSON multilinea con indentazione (per il consumo umano nel contesto di una config.json) in modo da:JSON formattazione con moshi

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

a qualcosa in questo modo:

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

so altre implementazioni jSON-scrittore può farlo - ma vorrei attenersi a Moshi qui per coerenza

risposta

3

Se si può fare con ser ializing l'oggetto da soli, questo dovrebbe fare il trucco:

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); 
    } 
} 

Questo stampa:

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

Vedi prettyPrintObject() nel this test file e source code of BufferedSinkJsonWriter.

Tuttavia, non ho ancora capito se e come è possibile farlo se si utilizza Moshi con Retrofit.

+0

Grazie! Esattamente quello che ho cercato e ho pensato che questo non è in grado con Moshi in quanto questo non è nel campo di applicazione di questa lib - felicemente sorpreso che ci sia in questo modo! – ligi

4

Ora è possibile utilizzare il metodo .indent(" ") sull'adattatore per la formattazione.

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

Nice - grazie per il follow-up – ligi

Problemi correlati