字符串转 json 之前，多做一步

问题

下面这段代码乍一看天衣无缝：

Copy
// 定义格式
final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("application/json; charset=UTF-8");
// 创建对象
final OkHttpClient client = new OkHttpClient();

// 此处的 answer 可以是任意的字符串
String reqData = "{\n" +
" \"req_data\": {\n" +
" \"text\": \"" +
answer +
"\\n\",\n" +
" \"image_ids\": [],\n" +
" \"mentioned_user_ids\": []\n" +
" }\n" +
"}";

// 将 reqData 传入作为请求体
Request request = new Request.Builder()
.url("https://api.zsxq.com/v2/topics/" + t.getTopicId() + "/comments")
.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, reqData))
.addHeader("cookie", cookie)
.addHeader("Content-type", "application/json; charset=UTF-8")
.build();

但是如果一旦 answer 里有换行

Copy
answer = "嘉兴大学是一所综合性大学。\n\n嘉兴大学设有本科……";

那最终转换出来的 reqData 就会有问题：

Copy
{
"req_data": {
"text": "嘉兴大学是一所综合性大学。

嘉兴大学设有本科……\n",
"image_ids": [],
"mentioned_user_ids": []
}
}

明显这段 json 的格式是有问题的

解决办法

我们期望的 reqData 是这样的：

Copy
{
"req_data": {
"text": "嘉兴大学是一所综合性大学。\n\n嘉兴大学设有本科……\n",
"image_ids": [],
"mentioned_user_ids": []
}
}

所以我们要修改 answer：

Copy
answer = answer.replace("\n", "\\n");

String reqData = "{\n" +
" \"req_data\": {\n" +
" \"text\": \"" +
answer +
"\\n\",\n" +
" \"image_ids\": [],\n" +
" \"mentioned_user_ids\": []\n" +
" }\n" +
"}";