【发布时间】:2020-06-20 08:40:49
【问题描述】:
我正在 Flutter 中“开发”一个移动应用程序,该应用程序必须通过 httpService 获取 json 进行解析。我对 Flutter 如何解析 json 文件、重新配置我的应用程序的方法和/或功能、允许它使用我的 Google App Script 当前输出的内容知之甚少;而且我对 Google App Scripts 的了解不够,无法修改该代码,以便它为 Flutter 应用程序提供所需的格式。但似乎做一个或另一个可以解决我的问题。
具体来说,我的 Flutter 应用需要一个如下所示的 json:
[
{ "userId":"My Category Kittens","id":"Black","title":"Solid","body":"10"},
{ "userId":"My Category Kittens","id":"White","title":"Striped","body":"20"},
{ "userId":"My Category Kittens","id":"Gray","title":"Spotted","body":"30"},
{ "userId":"My Category Puppies","id":"Brown","title":"Shaggy","body":"40"},
{ "userId":"My Category Puppies","id":"Blue","title":"Scruffy","body":"50"},
{ "userId":"My Category Puppies","id":"Orange","title":"Mangey","body":"60"},
{ "userId":"My Category Puppies","id":"Pink","title":"Fluffy","body":"70"},
{ "userId":"My Category Birdies","id":"Green","title":"Slick","body":"80"},
{ "userId":"My Category Birdies","id":"Yellow","title":"Pixeled","body":"90"},
{ "userId":"My Category Birdies","id":"Purple","title":"Plaid","body":"100"},
{ "userId":"My Category Birdies","id":"Transparent","title":"Argiled","body":"110"},
{ "userId":"My Category Birdies","id":"Utraviolet","title":"Bald","body":"120"}
]
但我的 Google Apps 脚本会生成这个:
{"user":[
{ "userId":"My Category Kittens","id":"Black","title":"Solid","body":"10"},
{ "userId":"My Category Kittens","id":"White","title":"Striped","body":"20"},
{ "userId":"My Category Kittens","id":"Gray","title":"Spotted","body":"30"},
{ "userId":"My Category Puppies","id":"Brown","title":"Shaggy","body":"40"},
{ "userId":"My Category Puppies","id":"Blue","title":"Scruffy","body":"50"},
{ "userId":"My Category Puppies","id":"Orange","title":"Mangey","body":"60"},
{ "userId":"My Category Puppies","id":"Pink","title":"Fluffy","body":"70"},
{ "userId":"My Category Birdies","id":"Green","title":"Slick","body":"80"},
{ "userId":"My Category Birdies","id":"Yellow","title":"Pixeled","body":"90"},
{ "userId":"My Category Birdies","id":"Purple","title":"Plaid","body":"100"},
{ "userId":"My Category Birdies","id":"Transparent","title":"Argiled","body":"110"},
{ "userId":"My Category Birdies","id":"Utraviolet","title":"Bald","body":"120"}
]}
那么,对于编辑我的 Google Apps 脚本以省略前导 '{"user":' 和结尾的 '}' 有什么建议吗?
这是我的 Google 应用脚本代码:
function doGet(e){
// Spread 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.user = dataArray;
var result = JSON.stringify(jo);
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
非常感谢任何帮助! 谢谢
【问题讨论】:
-
在你的脚本中,
dataArray被jo.user = dataArray;放到了user的属性中。在这种情况下,作为一个简单的修改,将jo.user = dataArray;修改为jo = dataArray;怎么样?这样,仅使用dataArray。顺便说一句,您似乎正在使用 Web 应用程序。因此,请在修改脚本时将 Web 应用程序重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请注意这一点。 -
哇,谢谢!这正是我想要的。杰出的!不幸的是,我现在才知道,这不是我需要的,哈哈。不过,这对我来说是一个巨大的进步。无论如何,我现在得到一个不同的错误:发生异常。 FormatException(FormatException:意外字符(在第 2 行,第 1 个字符) ^)。这可能是因为我的原始 json 请求使用了一个以 '.json' 结尾的 url,但这个 google app 脚本 url 不指示文件类型?
-
感谢您的回复和测试。我很高兴你的问题得到了解决。问题解决后,您可以将其发布为答案吗?这样,它将帮助有同样问题的用户。
-
是的。我将发布作为答案。那么我应该针对后续错误创建一个单独的问题吗?
-
现在我注意到您的回复已更新。我为此道歉。从您更新的回复中,发现您最初的问题已得到解决。关于你的新问题,我不得不为我的拙劣技能道歉。不幸的是,从您的回复中我无法理解。我认为提供更多信息将有助于思考新问题。那么如何通过包含更多信息将您的新问题发布为新问题?这样,我认为这将有助于包括我在内的用户思考新问题。
标签: json flutter google-apps-script google-sheets