微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中的Prettyprint json,直到只有第一个嵌套

如何解决Java中的Prettyprint json,直到只有第一个嵌套

我有一个json格式:

{ "John": { "company": "xxx","address": "San Francisco","contact": [ "phone1","phone2" ] },"Alice": { "company": "yyy","address": "Boston","contact": [ "phone3","phone4" ] } }

如果我使用GsonBuilder setPrettyPrinting,它将打印为:

{
  "John": {"company": "xxx","contact": ["phone1","phone2"]},"Alice": {"company": "yyy","contact": ["phone3","phone4"]}
}

我要按以下方式打印它:

{
  "John": {
    "company": "xxx","phone2"]
  },"phone4"]
  }
}

或至少在一行中包含联系人列表

{{1}}

这可能吗?可以使用GsonBuilder模块完成此操作吗?

解决方法

答案是否定的。 GsonBuilder没有该功能。 但是您可以编写自定义Java代码来仅打印JSON的第一级 通过获取密钥并单独循环第一层。

,

这可能吗?

排序。 Gson提供了整个文档的缩进,并且配置缩进仅影响JSON元素是否以配置的缩进级别放在新行上。

可以使用GsonBuilder模块完成此操作吗?

不。 GsonBuilder在其JavaDoc中很清楚,并且几乎没有可配置性:使用它,您只能启用或禁用缩进,当然它本身不能处理复杂的情况。

但是,您可以扩展JsonWriter来处理自己的嵌套并根据当前的嵌套级别切换缩进。

public final class PrettyJsonWriter
        extends JsonWriter {

    private int level;

    public PrettyJsonWriter(final Writer out) {
        super(out);
    }

    @Override
    public JsonWriter beginArray()
            throws IOException {
        final JsonWriter jsonWriter = super.beginArray();
        level++;
        adjustIndent();
        return jsonWriter;
    }

    @Override
    public JsonWriter endArray()
            throws IOException {
        final JsonWriter jsonWriter = super.endArray();
        level--;
        adjustIndent();
        return jsonWriter;
    }

    @Override
    public JsonWriter beginObject()
            throws IOException {
        final JsonWriter jsonWriter = super.beginObject();
        level++;
        adjustIndent();
        return jsonWriter;
    }

    @Override
    public JsonWriter endObject()
            throws IOException {
        final JsonWriter jsonWriter = super.endObject();
        level--;
        adjustIndent();
        return jsonWriter;
    }

    // handle whatever rules you want
    private void adjustIndent() {
        final String indent;
        switch ( level ) {
        case 1:
            indent = "\t";
            break;
        default:
            indent = StringUtils.EMPTY;
            break;
        }
        setIndent(indent);
    }

}

用法很简单:

final JsonWriter prettyJsonWriter = new PrettyJsonWriter(...);
...
gson.toJson(jsonElement,prettyJsonWriter);

您的文档将这样打印:

{
    "John": {"company":"xxx","address":"San Francisco","contact":["phone1","phone2"]},"Alice": {"company":"yyy","address":"Boston","contact":["phone3","phone4"]}
}

请注意,它不能为内联元素添加“漂亮空格”(即JohnAlice的属性用,分隔,而不是,(后跟空格)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。