【问题标题】:Configure how Jackson pretty prints JSON [duplicate]配置杰克逊如何漂亮地打印 JSON [重复]
【发布时间】:2020-01-30 13:37:00
【问题描述】:

我使用 Jackson 创建了一个 JSON 文件,并将其转发到外部 REST 服务。我花了几个小时才发现该服务对 JSON 文件的格式非常敏感。

这是被接受的:

[
  {
    "email": "foo.bar1@domain.com"
  },
  {
    "email": "foo.bar2@domain.com"
  }
]

这(这是 Jackson 漂亮打印机的默认行为)被接受并导致 REST 调用失败:

[ {
  "email": "foo.bar1@domain.com"
}, {
  "email": "foo.bar2@domain.com"
} ]

我可以将 Jackson 配置为使用其他格式吗?让我强调一下:我知道接收 REST 服务的作者应该解决这个问题,但这超出了我的范围。

Jackson 的定制 Pretty Printers 领域存在一些问题,例如 this one。但也许已经有定制了。

【问题讨论】:

  • 我认为您必须使用PrettyPrinter 接口的自定义实现。
  • 你应该检查这个问题stackoverflow.com/questions/39475967/…
  • 问题应该被删除,因为答案都没有产生新的信息,同时我发现所描述的REST端点问题没有被格式,而是行尾。也许投反对票的人可以做些更有用的事情,然后点击关闭作为重复按钮,我会这样做;-)

标签: java json jackson


【解决方案1】:

根据要求更新。

如果您对另一个库开放,请使用 Gson 来获得您所期望的。

    Emp emp = new Emp(1);
    List<Emp> emps = new ArrayList<>();
    emps.add(emp);
    emps.add(emp);

    Gson gson = new GsonBuilder().setPrettyPrinting().create();

    System.out.println(gson.toJson(emps));

输出:

[
  {
    "id": 1
  },
  {
    "id": 1
  }
]

class Emp {
    int id;

    public Emp() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Emp(int id) {
        this.id = id;
    }
}

【讨论】:

  • 据我了解,第二个示例输出中启用了漂亮的打印。
  • Pretty print 开启,OP 想要自定义漂亮的打印配置
  • @Amongalen 确实,它已启用。但我需要不同的格式
  • @Marged 查看您预期格式的更新答案
  • @Marged 现在是否生成了您期望的结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 2017-05-01
  • 2012-10-08
  • 2021-12-26
  • 2013-10-03
  • 2011-08-05
相关资源
最近更新 更多