首页 > 解决方案 > 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);
  
}  
 

屏幕截图 - MICROSOFT VISUAL STUDIO 代码运行: 屏幕截图 - MICROSOFT VISUAL STUDIO 代码运行

屏幕截图 - 通过浏览器提出未经身份验证的请求: 屏幕截图 - 通过浏览器提出未经身份验证的请求 请告知。任何帮助是极大的赞赏。谢谢!

标签: jsonfluttergoogle-apps-scriptgoogle-sheets

解决方案


推荐阅读