将ObjectNode写入JSON字符串,使用UTF-8字符转换为ASCII

ric*_*icb 33 java unicode json utf-8 jackson

我想把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();
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,此输出:

{"field1":"Maël Hörz"}
Run Code Online (Sandbox Code Playgroud)

我希望它输出的是:

{"field1":"Ma\u00EBl H\u00F6rz"}
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

Ale*_*lov 55

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

    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));
Run Code Online (Sandbox Code Playgroud)

输出是:

{"field1":"Ma\u00EBl H\u00F6rz"}
Run Code Online (Sandbox Code Playgroud)

  • 在 java play 2.3 上,导入为: com.fasterxml.jackson.databind.node.ObjectNode com.fasterxml.jackson.databind.ObjectMapper (2认同)

Kai*_*010 9

不推荐使用 JsonGenerator 使用 JsonWriteFeature 而不是它

 mapper.getFactory().configure(JsonWriteFeature.ESCAPE_NON_ASCII.mappedFeature(), true);
Run Code Online (Sandbox Code Playgroud)