使用 UTF-8 字符将 ObjectNode 写入 JSON 字符串以转义 ASCII

Posted

技术标签:

【中文标题】使用 UTF-8 字符将 ObjectNode 写入 JSON 字符串以转义 ASCII【英文标题】:Write ObjectNode to JSON String with UTF-8 Characters to Escaped ASCII 【发布时间】:2014-06-01 01:16:49 【问题描述】:

我想将 Jackson 的 ObjectNode 的内容写入一个字符串,其中 UTF-8 字符写为 ASCII(Unicode 转义)。

这是一个示例方法:

private String writeUnicodeString() 
    ObjectMapper mapper = new ObjectMapper();
    ObjectNode node = mapper.getNodeFactory().objectNode();
    node.put("field1", "Maël Hörz");
    return node.toString();

默认情况下,输出:

"field1":"Maël Hörz"

我希望它输出的是:

"field1":"Ma\u00EBl H\u00F6rz"

我怎样才能做到这一点?

【问题讨论】:

通过***.com/a/4901205/3080094 之类的东西? 【参考方案1】:

您应该启用控制非 ASCII 字符转义的 JsonGenerator 功能。这是一个例子:

    ObjectMapper mapper = new ObjectMapper();
    mapper.getFactory().configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);
    ObjectNode node = mapper.getNodeFactory().objectNode();
    node.put("field1", "Maël Hörz");
    System.out.println(mapper.writeValueAsString(node));

输出是:

"field1":"Ma\u00EBl H\u00F6rz"

【讨论】:

在java play 2.3上,导入的是:com.fasterxml.jackson.databind.node.ObjectNode com.fasterxml.jackson.databind.ObjectMapper【参考方案2】:

JsonGenerator 已被弃用,使用 JsonWriteFeature 代替它

 mapper.getFactory().configure(JsonWriteFeature.ESCAPE_NON_ASCII.mappedFeature(), true);

【讨论】:

以上是关于使用 UTF-8 字符将 ObjectNode 写入 JSON 字符串以转义 ASCII的主要内容,如果未能解决你的问题,请参考以下文章

Jackson Json:如何将数组转换为 JsonNode 和 ObjectNode?

如何在 Jackson 中将对象序列化为 ObjectNode 的值?

enterprisearchitect的objectnode怎么创建

Springfox/Swagger 中用于返回 ObjectNode 的自定义 ResponseModel

Jackson 中的 ObjectNode 和 JsonNode 有啥区别?

泽西岛:找不到媒体类型 = 应用程序/json、类型 = 类 org.codehaus.jackson.node.ObjectNode 的 MessageBodyWriter?