如何将 Jackson PrettyPrinter 格式 json 配置为 Gson
How to configure Jackson PrettyPrinter format json as Gson
Jackson DefaultPrettyPrinter 格式 json 为
{
"field" : [ 1, 2 ]
}
如何将其配置为格式 json,冒号前没有 space,并且数组的每个元素都从新行开始,就像 GSON 一样?
{
"field": [
1,
2
]
}
我指出的骗子的信息有点旧。我通过配置 DefaultPrettyPrinter
:
ObjectMapper om = new ObjectMapper();
DefaultPrettyPrinter dpp = new DefaultPrettyPrinter();
dpp.indentArraysWith(new DefaultIndenter(" ", "\n"));
om.setDefaultPrettyPrinter(dpp);
我实现了 PrettyPrinter,其格式 json 与 GSON
完全一样
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.util.DefaultIndenter;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.core.util.Separators;
import java.io.IOException;
public class MyPrettyPrinter extends DefaultPrettyPrinter {
public MyPrettyPrinter() {
_arrayIndenter = DefaultIndenter.SYSTEM_LINEFEED_INSTANCE;
_objectIndenter = DefaultIndenter.SYSTEM_LINEFEED_INSTANCE;
}
public MyPrettyPrinter(DefaultPrettyPrinter base) {
super(base);
}
@Override
public MyPrettyPrinter createInstance() {
if (getClass() != MyPrettyPrinter.class) {
throw new IllegalStateException("Failed `createInstance()`: " + getClass().getName()
+ " does not override method; it has to");
}
return new MyPrettyPrinter(this);
}
@Override
public MyPrettyPrinter withSeparators(Separators separators) {
this._separators = separators;
this._objectFieldValueSeparatorWithSpaces = separators.getObjectFieldValueSeparator() + " ";
return this;
}
@Override
public void writeEndArray(JsonGenerator g, int nrOfValues) throws IOException {
if (!_arrayIndenter.isInline()) {
--_nesting;
}
if (nrOfValues > 0) {
_arrayIndenter.writeIndentation(g, _nesting);
}
g.writeRaw(']');
}
@Override
public void writeEndObject(JsonGenerator g, int nrOfEntries) throws IOException {
if (!_objectIndenter.isInline()) {
--_nesting;
}
if (nrOfEntries > 0) {
_objectIndenter.writeIndentation(g, _nesting);
}
g.writeRaw('}');
}
}
需要覆盖 withSeparators
以删除冒号前的 space。覆盖 writeEndArray
和 writeEndObject
是为了删除空数组和空对象 []
{}
.
中的 space
您最终必须配置编写器,
ObjectMapper mapper = new ObjectMapper();
String String = "{\"field\" : [ 1, 2 ]}";
Object obj = mapper.readValue(String, Object.class);
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE);
System.out.println(mapper.writer(prettyPrinter).writeValueAsString(obj));
输出
{
"field" : [
1,
2
]
}
Jackson DefaultPrettyPrinter 格式 json 为
{
"field" : [ 1, 2 ]
}
如何将其配置为格式 json,冒号前没有 space,并且数组的每个元素都从新行开始,就像 GSON 一样?
{
"field": [
1,
2
]
}
我指出的骗子的信息有点旧。我通过配置 DefaultPrettyPrinter
:
ObjectMapper om = new ObjectMapper();
DefaultPrettyPrinter dpp = new DefaultPrettyPrinter();
dpp.indentArraysWith(new DefaultIndenter(" ", "\n"));
om.setDefaultPrettyPrinter(dpp);
我实现了 PrettyPrinter,其格式 json 与 GSON
完全一样import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.util.DefaultIndenter;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.core.util.Separators;
import java.io.IOException;
public class MyPrettyPrinter extends DefaultPrettyPrinter {
public MyPrettyPrinter() {
_arrayIndenter = DefaultIndenter.SYSTEM_LINEFEED_INSTANCE;
_objectIndenter = DefaultIndenter.SYSTEM_LINEFEED_INSTANCE;
}
public MyPrettyPrinter(DefaultPrettyPrinter base) {
super(base);
}
@Override
public MyPrettyPrinter createInstance() {
if (getClass() != MyPrettyPrinter.class) {
throw new IllegalStateException("Failed `createInstance()`: " + getClass().getName()
+ " does not override method; it has to");
}
return new MyPrettyPrinter(this);
}
@Override
public MyPrettyPrinter withSeparators(Separators separators) {
this._separators = separators;
this._objectFieldValueSeparatorWithSpaces = separators.getObjectFieldValueSeparator() + " ";
return this;
}
@Override
public void writeEndArray(JsonGenerator g, int nrOfValues) throws IOException {
if (!_arrayIndenter.isInline()) {
--_nesting;
}
if (nrOfValues > 0) {
_arrayIndenter.writeIndentation(g, _nesting);
}
g.writeRaw(']');
}
@Override
public void writeEndObject(JsonGenerator g, int nrOfEntries) throws IOException {
if (!_objectIndenter.isInline()) {
--_nesting;
}
if (nrOfEntries > 0) {
_objectIndenter.writeIndentation(g, _nesting);
}
g.writeRaw('}');
}
}
需要覆盖 withSeparators
以删除冒号前的 space。覆盖 writeEndArray
和 writeEndObject
是为了删除空数组和空对象 []
{}
.
您最终必须配置编写器,
ObjectMapper mapper = new ObjectMapper();
String String = "{\"field\" : [ 1, 2 ]}";
Object obj = mapper.readValue(String, Object.class);
DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE);
System.out.println(mapper.writer(prettyPrinter).writeValueAsString(obj));
输出
{
"field" : [
1,
2
]
}