web-dev-qa-db-ja.com

エスケープされたUTF-8文字を含むJSON文字列にObjectNodeを書き込むASCII

JacksonのObjectNodeの内容を、ASCII(Unicodeエスケープ))として書かれたUTF-8文字を含む文字列に書き込みたいと思います。

サンプルメソッドは次のとおりです。

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"}

どうすればこれを達成できますか?

32
ricb

非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"}
54
Alexey Gavrilov