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

Flutter帖子详情页获取评论报错:FormatException异常求助

解决Flutter中jsonDecode抛出FormatException的问题

问题原因

抛出FormatException: Unexpected character通常意味着服务器返回的内容不是有效的JSON格式——哪怕数据库查询结果正确,PHP脚本也可能输出了多余字符(比如调试echo语句、空格、PHP错误提示),或者JSON本身结构存在语法错误。

排查与解决方案

1. 先查看服务器返回的原始内容

在调用jsonDecode前,先打印响应体,确认实际返回的内容是否为有效JSON:

Future<void> getComments() async {
  var url = Uri.parse("http://172.30.182.148/uploads/getComments.php");
  var response = await http.post(url, body: {"post_id": widget.id});

  if (response.statusCode == 200) {
    // 打印原始响应内容,排查是否为有效JSON
    debugPrint("服务器返回内容:${response.body}");
    try {
      var data = jsonDecode(response.body);
      setState(() {
        comments = List<String>.from(data['comment']);
      });
    } catch (e) {
      debugPrint("JSON解析错误:$e");
      Fluttertoast.showToast(msg: "Yorumlar alınamadı: JSON格式错误");
    }
  } else {
    Fluttertoast.showToast(msg: "Yorumlar alınamadı");
  }
}

运行后查看控制台输出,如果看到非JSON内容(比如PHP警告、多余文本),说明问题出在服务器端。

2. 检查PHP脚本的输出

确保getComments.php只输出纯JSON,满足以下要求:

  • 删除所有额外输出:比如echo "查询成功";这类调试语句必须移除
  • 关闭PHP错误输出:在脚本开头添加error_reporting(0);,避免警告/通知信息混入JSON
  • 用json_encode正确输出数据:
<?php
error_reporting(0); // 关闭错误输出
// 数据库查询逻辑...
$comments = // 从数据库获取的评论数组
echo json_encode(['comment' => $comments]);
?>

3. 确认JSON结构与类型匹配

确保返回的JSON中comment字段是字符串数组,避免类型转换失败。可在解析时增加判断:

if (data['comment'] is List) {
  comments = List<String>.from(data['comment']);
} else {
  Fluttertoast.showToast(msg: "Yorumlar formatı hatalı");
}

内容的提问来源于stack exchange,提问作者Sıla Yıldırım

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:34:52