問題#
以下のコードは一見完璧です:
// フォーマットを定義
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 に改行が含まれている場合、最終的に変換された 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" +
"}";