如何在gson中使用缩进来生成json文件

时间:2017-08-16 08:53:26

标签: java json gson

我必须生成一个包含缩进的json文件。我正在使用Jackson,但它在冒号之前添加了一个空格,我不需要它,所以我决定使用Gson

更改代码后,我发现默认情况下Gson不使用缩进,Jackson会使用缩进。有谁知道Gson是否有可能获得缩进以及如何进行缩进?

为了使用json生成Gson文件,我做了这个:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder = gsonBuilder.setPrettyPrinting();
Gson gson = gsonBuilder.create();
Writer writer = new FileWriter(propsFile); 
gson.toJson(properties, writer);

1 个答案:

答案 0 :(得分:0)

可能的https://stackoverflow.com/a/41509714/4379906副本


使用Jackson并将其配置为不在冒号之前添加空格:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.2</version>
</dependency>

CustomPrettyPrinter.java

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;

import java.io.IOException;

class CustomPrettyPrinter extends DefaultPrettyPrinter {
    public CustomPrettyPrinter() {
        super();
    }

    public CustomPrettyPrinter(DefaultPrettyPrinter base) {
        super(base);
    }

    @Override
    public void writeObjectFieldValueSeparator(JsonGenerator g) throws IOException {
        g.writeRaw(": ");
    }

    @Override
    public DefaultPrettyPrinter createInstance() {
        return new CustomPrettyPrinter(this);
    }
}

UseJackson.java

import com.fasterxml.jackson.core.util.DefaultIndenter;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.util.Properties;

public class UseJackson {
    public static void main(String[] args) throws IOException {
        DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter("    ", DefaultIndenter.SYS_LF);
        DefaultPrettyPrinter printer = new CustomPrettyPrinter();
        printer.indentArraysWith(indenter);
        printer.indentObjectsWith(indenter);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDefaultPrettyPrinter(printer);

        Properties properties = new Properties();
        properties.put("foo", "3");
        properties.put("bar", "4");
        objectMapper.writerWithDefaultPrettyPrinter().writeValue(new File("a.json"), properties);
    }
}

使用Gson并配置缩进:

UseGson.java

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.stream.JsonWriter;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class UseGson {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        properties.put("foo", "3");
        properties.put("bar", "4");

        JsonWriter jsonWriter = new JsonWriter(new FileWriter("a.json"));
        jsonWriter.setIndent("    ");

        Gson gson = new GsonBuilder().serializeNulls().create();
        gson.toJson(properties, Properties.class, jsonWriter);

        jsonWriter.close();
    }
}