使用Gson序列化字符串,其中包含\ n

时间:2015-06-09 12:21:13

标签: java serialization gson

\ n在字符串中有效打印下一行\ n后面的文本。但是,如果使用Gson序列化相同的字符串,则\ n在下一行中打印时不再有效。我们该如何解决这个问题?示例程序如下。

在下面的程序中,由于存在\ n,地图上toString的输出是在下一行打印文本。但是,使用Gson序列化的json字符串无法显示相同的行为。在序列化字符串中,即gsonOutput变量,' \'和' n'被视为单独的字符,因此\ n下的文本未在下一行打印。我们如何在gson序列化中解决这个问题?

程序:

Map<String, String> map = new HashMap<String,String>();
map.put("x", "First_Line\nWant_This_To_Be_Printed_In_Next_Line");

final String gsonOutput = new Gson().toJson(map);
final String toStringOutput = map.toString();

System.out.println("gsonOutput:" + gsonOutput);
System.out.println("toStringOutput:" + toStringOutput);

Output:  
gsonOutput:{"x":"First_Line\nWant_This_To_Be_Printed_In_Next_Line"}  
toStringOutput:{x=First_Line  
Want_This_To_Be_Printed_In_Next_Line}

1 个答案:

答案 0 :(得分:1)

我猜测gsonOutput已经转义了新行,所以如果你改变了行

final String gsonOutput = new Gson().toJson(map);

to(to unescape it):

final String gsonOutput = new Gson().toJson(map).replace("\\n", "\n");

您将获得输出

gsonOutput:{"x":"First_Line
Want_This_To_Be_Printed_In_Next_Line_With_A_Tab_Before_It"}
toStringOutput:{x=First_Line
Want_This_To_Be_Printed_In_Next_Line_With_A_Tab_Before_It}

可能有更好的方法: - )