现在我有一个org.fasterxml.jackson.databind.ObjectMapper
的实例,希望得到一个带有漂亮JSON的String
。我的谷歌搜索的所有结果都提出了Jackson 1.x这样做的方法,我似乎无法找到适当的,不推荐使用2.2的方法。虽然我不相信代码对于这个问题是绝对必要的,但这就是我现在所拥有的:
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
System.out.println("\n\n----------REQUEST-----------");
StringWriter sw = new StringWriter();
mapper.writeValue(sw, jsonObject);
// Want pretty version of sw.toString() here
答案 0 :(得分:248)
您可以通过设置SerializationFeature.INDENT_OUTPUT
上的ObjectMapper
来启用漂亮打印:
mapper.enable(SerializationFeature.INDENT_OUTPUT);
答案 1 :(得分:44)
根据mkyong,神奇的咒语是defaultPrintingWriter
到pretty print JSON:
较新版本:
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonInstance));
旧版本:
System.out.println(mapper.defaultPrettyPrintingWriter().writeValueAsString(jsonInstance));
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(someObject);
希望这会有所帮助......
答案 2 :(得分:32)
杰克逊API发生了变化:
new ObjectMapper()
.writer()
.withDefaultPrettyPrinter()
.writeValueAsString(new HashMap<String, Object>());
答案 3 :(得分:3)
IDENT_OUTPUT没有为我做任何事情,并提供一个完整的答案,适用于我的杰克逊2.2.3罐子:
public static void main(String[] args) throws IOException {
byte[] jsonBytes = Files.readAllBytes(Paths.get("C:\\data\\testfiles\\single-line.json"));
ObjectMapper objectMapper = new ObjectMapper();
Object json = objectMapper.readValue( jsonBytes, Object.class );
System.out.println( objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString( json ) );
}
答案 4 :(得分:0)
如果您希望默认情况下为进程中的所有ObjectMapper实例启用此功能,这里有一点将您将INDENT_OUTPUT的默认值设置为true的hack:
val indentOutput = SerializationFeature.INDENT_OUTPUT
val defaultStateField = indentOutput.getClass.getDeclaredField("_defaultState")
defaultStateField.setAccessible(true)
defaultStateField.set(indentOutput, true)
答案 5 :(得分:0)
如果您使用的是弹簧和杰克逊组合,您可以按照以下方式进行操作。我按照建议关注@gregwhitaker,但是以春季风格实现。
<bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd" />
<property name="lenient" value="false" />
</bean>
</property>
<property name="serializationInclusion">
<value type="com.fasterxml.jackson.annotation.JsonInclude.Include">
NON_NULL
</value>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject">
<ref bean="objectMapper" />
</property>
<property name="targetMethod">
<value>enable</value>
</property>
<property name="arguments">
<value type="com.fasterxml.jackson.databind.SerializationFeature">
INDENT_OUTPUT
</value>
</property>
</bean>
答案 6 :(得分:0)
如果其他查看此问题的人只有JSON字符串(对象中没有),则可以将其放入red
ed
d
中,并且仍然可以使var vid = document.getElementById("myVideo");
//set autoplay
vid.autoplay = true;
//mute so autoplay has highest chance
vid.muted = true;
//loop so it dosn't end
vid.loop= true;
//reload so these effect
vid.load();
//play incase
vid.play();
正常工作。 <video id='myVideo' src ='https://vjs.zencdn.net/v/oceans.mp4'></video>
变量是您的JSON字符串。
HashMap
答案 7 :(得分:-7)
试试这个。
objectMapper.enable(SerializationConfig.Feature.INDENT_OUTPUT);