【问题标题】:How to parse curly braces JSON in Google Apps Script?如何在 Google Apps 脚本中解析花括号 JSON?
【发布时间】:2021-09-29 04:25:19
【问题描述】:

我有以下来自 API 的输出。如何使用 Google Apps 脚本解析并获得该输出作为 Google Sheets 表格?

我尝试了以下方法,但只获得了 Null。

var response = UrlFetchApp.fetch(url, options);
var text = response.getContentText();

for (i in text) {
  Logger.log(text[i]);
}
{
   "status":1,
   "complete":1,
   "list":{
      "3357271691":{
         "item_id":"3357271691",
         "resolved_id":"3357271691",
         "given_url":"https:\/\/www.bloomberg.com\/news\/features\/2021-06-15\/airbnb-spends-millions-making-nightmares-at-live-anywhere-rentals-go-away",
         "given_title":"",
         "favorite":"0",
         "status":"0",
         "time_added":"1623783338",
         "time_updated":"1623783338",
         "time_read":"0",
         "time_favorited":"0",
         "sort_id":0,
         "resolved_title":"Airbnb Is Spending Millions of Dollars to Make Nightmares Go Away",
         "resolved_url":"https:\/\/www.bloomberg.com\/news\/features\/2021-06-15\/airbnb-spends-millions-making-nightmares-at-live-anywhere-rentals-go-away",
         "excerpt":"When things go horribly wrong during a stay, the company\u2019s secretive safety team jumps in to soothe guests and hosts, help families\u2014and prevent PR disasters. Megaphone.fm: How Airbnb Makes Nightmares Disappear...",
         "is_article":"1",
         "is_index":"0",
         "has_video":"0",
         "has_image":"1",
         "word_count":"155",
         "lang":"en",
         "top_image_url":"https:\/\/assets.bwbx.io\/images\/users\/iqjWHBFdfxIU\/iWjqS9z4c46I\/v0\/1200x630.jpg",
         "domain_metadata":{
            "name":"Bloomberg",
            "logo":"https:\/\/logo.clearbit.com\/bloomberg.com?size=800",
            "greyscale_logo":"https:\/\/logo.clearbit.com\/bloomberg.com?size=800&greyscale=true"
         },
         "listen_duration_estimate":60
      }
   }
}

【问题讨论】:

    标签: javascript arrays json google-apps-script google-sheets


    【解决方案1】:

    我相信你的目标如下。

    • 您想要解析检索到的text 的值并将数据放入电子表格。

    在这种情况下,下面的示例脚本怎么样?在这个示例脚本中,解析值并创建一个二维数组,并将该数组放入电子表格中。

    示例脚本:

    function myFunction() {
      var response = UrlFetchApp.fetch(url, options);
      var text = response.getContentText();
    
      // I added below script.
      var header = ["item_id", "resolved_id", "given_url","given_title","favorite","status","time_added","time_updated","time_read","time_favorited","sort_id", "resolved_title","resolved_url","excerpt","is_article","is_index","has_video","has_image","word_count","lang","top_image_url", "domain_metadata.name","domain_metadata.logo","domain_metadata.greyscale_logo","listen_duration_estimate"];
      var values = [header, ...Object.values(JSON.parse(text).list).map(o => header.map(k => {
        var temp = k.split(".");
        if (temp.length == 1) {
          return o[temp[0]] || "";
        }
        return o[temp[0]] && o[temp[0]][temp[1]] ? o[temp[0]][temp[1]] : "";
      }))];
      console.log(values) // You can check the created array.
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Articles"); // Please set the sheet name.
      sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
    }
    
    • 在这种情况下,所有值都放入电子表格。所以,当你想改变标题时,请修改它。

    注意:

    • 此示例脚本假定您的text 值与您的问题中显示的值相同。当值的结构不同时,可能无法使用此脚本。请注意这一点。

    参考资料:

    【讨论】:

    • 我收到以下错误TypeError: Cannot read property 'name' of undefined 指向var values... 行?与...Object.values 有什么关系?
    • @Shantanu 感谢您的回复。我带来的不便表示歉意。关于Cannot read property 'name' of undefined,在这种情况下,我担心您的text 值可能与您问题中的样本值不同。因为我认为从您的错误消息中,您的实际值可能不具有domain_metadata 的属性。而且,当我使用您的示例值测试脚本时,不会发生错误。那么您能提供您当前的text 值吗?通过这个,我想检查脚本。
    • @Shantanu 当你的实际值是没有domain_metadata属性的值时,我认为当你使用上面修改的脚本时,不会出现错误。
    • 我相信是这样,但我无法找到具体的错误。我已经添加了上面的完整功能。可以看看吗?
    • 没有。你做得非常好。我来自 Python 背景,所以我的 JS 技能很差。您可以在此处找到文本值 - pastebin.com/fznYe8fa
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2018-03-22
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    相关资源
    最近更新 更多