問題#
下面這段程式碼乍一看天衣無縫:
// 定義格式
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" +
"}";