问题#
下面这段代码乍一看天衣无缝:
// 定义格式
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 里有换行
answer = "嘉兴大学是一所综合性大学。\n\n嘉兴大学设有本科……";
那最终转换出来的 reqData 就会有问题:
{
"req_data": {
"text": "嘉兴大学是一所综合性大学。
嘉兴大学设有本科……\n",
"image_ids": [],
"mentioned_user_ids": []
}
}
明显这段 json 的格式是有问题的
解决办法#
我们期望的 reqData 是这样的:
{
"req_data": {
"text": "嘉兴大学是一所综合性大学。\n\n嘉兴大学设有本科……\n",
"image_ids": [],
"mentioned_user_ids": []
}
}
所以我们要修改 answer:
answer = answer.replace("\n", "\\n");
String reqData = "{\n" +
" \"req_data\": {\n" +
" \"text\": \"" +
answer +
"\\n\",\n" +
" \"image_ids\": [],\n" +
" \"mentioned_user_ids\": []\n" +
" }\n" +
"}";