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

时间:2014-04-16 23:06:27

标签: java json unicode utf-8 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"}

我该如何做到这一点?

2 个答案:

答案 0 :(得分:51)

您应该启用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));

输出结果为:

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

答案 1 :(得分:5)

不建议使用JsonGenerator而不是JsonWriteFeature

class BadNumber : public std::exception
{
    private:
        std::string _msg;
    public:
        virtual ~BadNumber() throw() {return ;}
        BadNumber(std::string type, std::string num) : _msg(num + "is invalid type for " + type) {}
        virtual const char *what() const throw()
        {
            return (_msg.c_str());
        }
};