在我的应用程序中,我想解析保存在Asset-目录中的JSON文件。当我在本地调试模式下运行它时,我可以在没有任何问题的情况下解析该文件,但是当它在生产中运行时(由Firebase托管),我会得到以下SyntaxError:
未登录的FormatException: SyntaxError: 0位置JSON中的意外令牌<
下面是我在代码中读取文件的方式:
Future<String> _getEmoji() async {
String emoji;
if (_emojiList.isEmpty) {
final String response = await rootBundle.loadString('data-ordered-emoji.json');
final data = json.decode(response);
emoji = data[Random().nextInt(data.length)];
_emojiList = data;
} else {
emoji = _emojiList[Random().nextInt(_emojiList.length)];
}
return emoji;
}
我使用的JSON正是这个文件:https://unpkg.com/unicode-emoji-json@0.3.1/data-ordered-emoji.json
根据IntelliJ,它是用UTF-8编码的.
我在这里错过了什么?
编辑:在上面的方法中添加了一个print命令,以了解JSON看起来如何,我看到它不是我保存在Asset-目录中的JSON文件。它是构建的index.html文件。那件事怎么可能?
发布于 2022-05-17 01:07:20
解决了。问题是构建中没有包含资产目录。因此,我必须将其添加到pubspec.yaml文件中:
flutter:
assets:
- assets/
在build/web/assets中包含了资产目录,JSON在生产中是可用的。奇怪的是,index.html却被拿走了。
发布于 2022-05-17 00:25:30
对不起,我不能发表评论,所以我发布了这个答复。
json可能被打包在'<‘和’>内部,所以json解码器无法解码它.
我建议您首先打印响应并检查这个意外字符。如果有这个奇怪的字符,只需删除第一个和最后一个字符。
String loginToken="<Hello>";
System.out.println(loginToken.substring(1, loginToken.length()-1))
输出: Hello
进一步的例子:如何使用子字符串省道
https://stackoverflow.com/questions/72270415
复制相似问题