【发布时间】:2022-01-18 01:45:48
【问题描述】:
我有一个网站,其中包含 Flutter 读取的生成 JSON。 JSON 包含一个名称列表,我希望将其显示为列中的列表。 启动应用程序时,它显示在中心:
FormatException: SyntaxError: Unexpected token < in JSON at position 0
我已经确保检查 JSON 是否无效,但没有问题。
{
"data": [
{
"Name": "PlayerOne",
"Data": "{\"isOnline\":false}"
},
{
"Name": "PlayerTwo",
"Data": "{\"isOnline\":false}"
}
]
}
如果 isOnline 设置为 true,则应该是所有名称。 这是解码 JSON 的工厂函数:
factory PlayersOnline.fromJson(Map<String, dynamic> json) {
return PlayersOnline(
Name: json["data.Name"],
isOnline: json["data.Data"]
);
以及来自 build 的未来建设者:
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text("Test"),
),
body: FutureBuilder(
future: fetchOnline(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data!);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return const CircularProgressIndicator();
},
)
),
);
}
申请方法:
Future<PlayersOnline> fetchOnline() async {
final response = await http.get(Uri.parse("serwer.fabrykacraft.pl"));
if (response.statusCode == 200) {
return PlayersOnline.fromJson(json.decode(response.body));
} else {
throw Exception("Can't fetch data");
}
}
虽然 JSON 是通过 PHP 从 MySQL 格式化而来的。
编辑:获取 json 也有问题,因为我忘记了 php 代码中的标头。
【问题讨论】:
-
您的代码存在一些问题,即在
fromJson方法上,但您收到的错误意味着您的 JSON 无效,它可能是某种 HTML 代码,它在说明你发现它找到了<作为响应的第一个字符,这当然不是有效的 JSON。请问您是如何检查 JSON 是否有效并显示您的请求代码的? -
@h8moss 当然,不过说实话,我只是按照文档进行操作。