banner
指数爆炸

指数爆炸

我做了对饭 !
github
bilibili

文字列をJSONに変換する前に、追加のステップを行ってください。

問題#

以下のコードは一見完璧です:

// フォーマットを定義
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" +
        "}";
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。