如何将Java对象序列化为转义的JSON字符串?

时间:2012-05-30 14:15:01

标签: java json

有没有办法将Java对象转换为如下所示的字符串? 请注意,所有字段名称都应进行转义,"\n"用于分隔记录。

{

"content":"{\"field1\":123, \"field2\":1, \"field3\":0, \"field4\":{\"sub1\":\"abc\", \"sub2\":\"xyz\"}}\n
{\"field1\":234, \"field2\":9, \"field3\":1, \"field4\":{\"sub1\":\"xyz\", \"sub2\":\"abc\"}}"

}

谢谢,

2 个答案:

答案 0 :(得分:2)

您可以使用GSON执行该任务。

  

Gson是一个Java库,可用于将Java对象转换为JSON表示。它还可用于将JSON字符串转换为等效的Java对象。 Gson可以处理任意Java对象,包括您没有源代码的预先存在的对象。

如果您需要更好的可读表示,可以使用漂亮的打印功能。

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

要实现类似于您的示例的内容,您可以在第一步中序列化您的内容类,将结果字符串作为属性放在另一个类中并再次序列化该类。

这样GSON会处理"的转义。

如果您在数组中收集字符串并使用上面显示的漂亮打印选项,则会得到类似于换行符要求的内容,但不完全相同。

上述过程的结果可能如下所示:

{
  "content": [ 
    "{\"field1\":123, \"field2\":1, \"field3\":0, \"field4\":{\"sub1\":\"abc\", \"sub2\":\"xyz\"}}",
    "{\"field1\":234, \"field2\":9, \"field3\":1, \"field4\":{\"sub1\":\"xyz\", \"sub2\":\"abc\"}}"
  ]
}

答案 1 :(得分:0)

另一种方法是使用Json-lib库http://json-lib.sourceforge.net

String jsonStrData = " ....... ";
JSONObject jsonObj = JSONObject.fromObject(jsonStrData);
System.out.println(jsonObj);

与GSON一样,json-lib会为您处理转义,有关如何在此处使用它的更多信息http://json-lib.sourceforge.net/usage.html