json - Flutter 异常错误处理 Google Apps 脚本生成的 json
问题描述
开发我的第一个 Flutter 移动应用程序,一个从以下位置获取 json 的代码片段:
'https://my-json-server.typicode.com/typicode/demo/posts'
...成功响应、解码、解析等。然后当我使用上传到 git 的文档进行测试时:
'https://raw.githubusercontent.com/rays-github/theirmenu/master/db.json'
...这也有效。但是当我尝试使用自己的数据时(Google Web Apps Script 将 Google Sheets 电子表格发布为 json):
'https://script.googleusercontent.com/macros/echo?user_content_key=_DZABYr6b6k274bCyLNtzSBd1jtYF_WpuFDYAtNQT-uE6uj0teMefPEiNDxNisIH0ew63RSj757Xh5smCcvouuLLk_VcYyB8m5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnPKmEGJr49ifP_3P8Fcnrtzcwn0zyFgFMfS_we8kf_vIvupeaUN7ec2K60MRzRqUBQ&lib=MNDmyszRDOPMr7WJ3Tg4jKCcl7uh4ZtSK'
...我收到错误:
Exception has occurred.
FormatException (FormatException: Unexpected character (at line 2, character 1)
<!DOCTYPE html>
^
)
这是我的颤振片段:
import 'dart:convert';
import 'package:theirmenu001pt00/tm_menuitem_model.dart';
import 'package:http/http.dart';
class HttpService {
// final String postsUrl = "https://my-json-server.typicode.com/typicode/demo/posts";
// final String postsUrl = "https://raw.githubusercontent.com/rays-github/theirmenu/master/db.json";
final String postsUrl = "https://script.googleusercontent.com/macros/echo?user_content_key=7zmRRkd__iPae6VZ9oq5TTNjfEm3QQV9EYBvQN-awvPS4-HNw2C4wbUSC8ud0J9rfFuxXvwhWPMjiJj5GUVQvGHDvinAYraCm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnPKmEGJr49ifP_3P8Fcnrtzcwn0zyFgFMfS_we8kf_vIvupeaUN7ec2K60MRzRqUBQ&lib=MNDmyszRDOPMr7WJ3Tg4jKCcl7uh4ZtSK";
Future<List<Post>> getMenuItems() async {
Response res = await get(postsUrl);
if (res.statusCode == 200) {
List<dynamic> body = jsonDecode(res.body);
List<Post> posts =
body.map((dynamic item) => Post.fromJson(item)).toList();
return posts;
} else {
throw "Can't get posts.";
}
}
}
这是我的 Google Web App 脚本:
function doGet(e){
// Sheet url
var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1jsBS-RBNRxYU66WFkJHvrzHLGmNqxBzzQfaHJO6i6UY/edit#gid=446843772");
// Sheet Name
var sheet = ss.getSheetByName("Users");
return getUsers(sheet);
}
function getUsers(sheet){
var jo = {};
var dataArray = [];
// collecting data from 2nd Row , 1st column to last row and last column
var rows = sheet.getRange(2,1,sheet.getLastRow()-1, sheet.getLastColumn()).getValues();
for(var i = 0, l= rows.length; i<l ; i++){
var dataRow = rows[i];
var record = {};
record['userId'] = dataRow[0];
record['id'] = dataRow[1];
record['title'] = dataRow[2];
record['body'] = dataRow[3];
dataArray.push(record);
}
jo = dataArray;
var result = JSON.stringify(jo);
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
解决方案
推荐阅读
- r - 从 R 中的函数内更新全局环境中的嵌套列表对象
- java - 我想反转一个 char 数组,为什么在使用 Arrays.sort(arr, Collections.reverseOrder()) 时它会失败?
- python - Python 在几个部分上拆分文本
- java - 将文件上传到 Firebase 存储时,RecyclerView 中的进度条未更新
- azure-pipelines - 在 Yarn 中设置私有注册表不起作用
- vb.net - 如何获取源代码并将其放入我的 gridview 中?
- javascript - AsyncStorage 已从 react-native 核心中提取,将在未来的版本中删除
- android - 与 Playstore aab 不同的独立 apk:LinearGradient 使用错误的颜色
- unity3d - 使用 WebGL 构建 Unity3D 项目时的“资源文件”是什么?使用 Unity3D WebGL-Build 需要考虑什么?
- firebase - 使用firestore访问的React-native-firebase和firebase配置问题