You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在请求体中提交JSON字符串而非JSON对象?

解决Dart http.post纯字符串请求体的问题

核心问题分析

你遇到的报错本质是:当请求头设置content-type: application/json时,请求体必须是合法的JSON格式,而纯UUID字符串本身不是合法JSON(JSON要求顶层值若为字符串,必须用双引号包裹;部分后端还只接受顶层为对象/数组的JSON)。

正确解决方案

分三种场景处理:

场景1:后端接受顶层字符串作为JSON

直接用jsonEncode处理UUID字符串,它会自动生成符合JSON规范的带双引号的字符串:

await http.post(
  Uri.parse(url),
  headers: {
    "content-type": "application/json",
  },
  body: jsonEncode("3ea9554d-7a1f-4f20-f6f5-08da74d069a8"),
);

场景2:后端仅接受JSON对象(多数情况)

如果后端期望的是包含UUID的JSON对象而非纯字符串,把UUID封装成键值对再编码:

await http.post(
  Uri.parse(url),
  headers: {
    "content-type": "application/json",
  },
  body: jsonEncode({"id": "3ea9554d-7a1f-4f20-f6f5-08da74d069a8"}),
);

场景3:后端接受纯文本请求体

如果后端实际不需要JSON格式,仅要求传纯字符串,修改请求头的content-type为text/plain即可:

await http.post(
  Uri.parse(url),
  headers: {
    "content-type": "text/plain",
  },
  body: "3ea9554d-7a1f-4f20-f6f5-08da74d069a8",
);

你的尝试错误原因

  • 直接传body: "3ea9554d-...":不符合JSON格式,JSON字符串必须用双引号包裹,所以解析报错。
  • 手动加转义双引号"\"3ea9554d-...\"":虽然格式正确,但不如jsonEncode可靠,且如果后端不接受顶层字符串仍会报错。
  • jsonDecode('3ea9554d-...'):纯UUID不是合法JSON,JSON字符串必须带双引号,所以抛出格式异常。

内容的提问来源于stack exchange,提问作者Hasan El-Hefnawy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:06:20