本文介绍了Java Json漂亮打印javax.json的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to pretty print json with the javax.json API

我当前使用的代码如下:

The code I'm currently using is as follows:

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.

You should be using JsonWriter instead of 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-18 09:37