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
相关产品推荐
相关产品推荐

