Java Json漂亮打印javax.json

我正在尝试使用javax.json API漂亮地打印json

我当前使用的代码如下:

private String prettyPrint(String json) {

StringWriter sw = new StringWriter();

try {

JsonReader jr = Json.createReader(new StringReader(json));

JsonObject jobj = jr.readObject();

Map<String, Object> properties = new HashMap<>(1);

properties.put(JsonGenerator.PRETTY_PRINTING, true);

JsonGeneratorFactory jf = Json.createGeneratorFactory(properties);

JsonGenerator jg = jf.createGenerator(sw);

jg.write(jobj).close();

} catch (Exception e) {

}

String prettyPrinted = sw.toString();

return prettyPrinted;

}

我收到以下异常:

11:47:08,830 ERROR [stderr] (EJB default - 1) javax.json.stream.JsonGenerationException: write(JsonValue) can only be called in array context

11:47:08,835 ERROR [stderr] (EJB default - 1) at org.glassfish.json.JsonGeneratorImpl.write(JsonGeneratorImpl.java:301)

11:47:08,838 ERROR [stderr] (EJB default - 1) at org.glassfish.json.JsonPrettyGeneratorImpl.write(JsonPrettyGeneratorImpl.java:55)

11:47:08,841 ERROR [stderr] (EJB default - 1) at org.proactive.rest.VideoFeedService.prettyPrint(VideoFeedService.java:247)

11:47:08,843 ERROR [stderr] (EJB default - 1) at org.proactive.rest.VideoFeedService.requestVideoFeedData(VideoFeedService.java:124)

11:47:08,845 ERROR [stderr] (EJB default - 1) at org.proactive.rest.VideoFeedService.run(VideoFeedService.java:86)

11:47:08,848 ERROR [stderr] (EJB default - 1) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

11:47:08,850 ERROR [stderr] (EJB default - 1) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

11:47:08,852 ERROR [stderr] (EJB default - 1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

11:47:08,854 ERROR [stderr] (EJB default - 1) at java.lang.reflect.Method.invoke(Method.java:483)

回答:

您应该使用JsonWriter而不是JsonGenerator。

替换这些行:

JsonGeneratorFactory jf = Json.createGeneratorFactory(properties);

JsonGenerator jg = jf.createGenerator(sw);

jg.write(jobj).close();

用这些:

JsonWriterFactory writerFactory = Json.createWriterFactory(properties);

JsonWriter jsonWriter = writerFactory.createWriter(sw);

jsonWriter.writeObject(jobj);

jsonWriter.close();

以上是 Java Json漂亮打印javax.json 的全部内容, 来源链接: utcz.com/qa/401339.html

回到顶部