如何使用Gson忽略转换为字符的换行符

时间:2016-11-15 14:16:49

标签: json gson

我正在使用Gson api将对象转换为json文档。其中一个属性是一个字符串,它是一个xml字符串。转换后,xml打印不正确,所有换行都转换为\ n,所有选项卡都转换为\ t。

代码:

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

mashalledJson = gson.toJson(documentPropertiesWrapper);


expected Output :

<name>InterestRates_Trade_EMEA_MUREX_OfficialEOD_CentreState</name>
<snapshotDate>2015-01-01</snapshotDate>

Actual Output : 

<name>InterestRates_Trade_EMEA_MUREX_OfficialEOD_CentreState</name>\r\n\t<snapshotDate>2015-01-01</snapshotDate>

2 个答案:

答案 0 :(得分:0)

这必须使用String replaceAll()方法来实现。在将对象转换为JSON之前,新行字符,制表符,回车符等应替换为空字符串。

Gson没有任何删除这些字符的功能。

1)全部替换

xmlString.replaceAll("\r", "").replaceAll("\n", "").replaceAll("\t", "")

2)在对象

中设置xml字符串值

3)将对象转换为JSON

修改: -

如果您需要换行,请使用下面不能替换新行“\ n”。

 xmlString.replaceAll("\r", "").replaceAll("\t", "")

答案 1 :(得分:0)

所以我尝试了这个问题的唯一答案,但它没有用,所以我不得不找出原因。经过一些试验,结果表明需要进行一些编辑,因此我创建了以下实用程序,该实用程序对您有帮助:

private static String serialize(Object object) {
    final Gson prettyGson = new GsonBuilder()
            .setPrettyPrinting()
            .serializeNulls()
            .disableHtmlEscaping()
            .create();

    final String prettyGsonString = prettyGson.toJson(object);

    return prettyGsonString
            .replaceAll("\\\\n", "\n")
            .replaceAll("\\\\t", "\t")
            .replaceAll("\\\\b", "\b")
            .replaceAll("\\\\r", "\r")
            .replaceAll("\\\\f", "\f")
            .replaceAll("\\\\'", "\'");
}