【问题标题】:Parse Json from Google spreadsheet cell从 Google 电子表格单元格中解析 Json
【发布时间】:2018-02-28 23:04:00
【问题描述】:

在谷歌电子表格单元格中我有这个文本:

{"age_max":65,"age_min":18,"flexible_spec":[{"interests":[{"id":"6002867432822","name":"Beauty"},{"id":"6002991733794","name":"Beauty & Care"},{"id":"6003177110133","name":"Natural Beauty"},{"id":"6003211042524","name":"Health and Beauty Care"},{"id":"6003393295343","name":"Health And Beauty"},{"id":"6003460329503","name":"Beautiful Skin"},{"id":"6004111438209","name":"Facial care"}]}],"genders":[2],"geo_locations":{"countries":["SK"],"location_types":["home","recent"]},"locales":[2,33],"targeting_optimization":"none","publisher_platforms":["facebook"],"facebook_positions":["feed","right_hand_column","instant_article"],"device_platforms":["mobile","desktop"]};

它来自 Facebook API 的 JSON 来自 Supermetrics。

现在我想解析这个单元格,但是这段代码不起作用:-/

我在电子表格“=parseTargeting(A1)”中使用此函数

以及脚本编辑器中的这个自定义函数。

 function parseTargeting(jsonData) {




    var flexible_spec = jsonData["flexible_spec"];
    var maxAge = jsonData["age_max"];
    var minAge = jsonData["age_min"];

    var interestsBasics = jsonData["flexible_spec"][0]["interests"][0]["name"];


    var interestsBasicsCelkem = jsonData["flexible_spec"][0]["interests"].length-1;
    var interests = "";
    var output = [];

    for(var i = 0; i<=interestsBasicsCelkem; i++){

      interests += jsonData["flexible_spec"][0]["interests"][i]["name"]+ "\n";  


    }

    var returnVek = "Vek:"+minAge + " - " + maxAge+" \n";
    var returnInterests = "Zájmy:"+interests;


    var returnString = returnVek + returnInterests;



  return returnString;

}

这个函数总是返回未定义。如果我添加此代码

" var jsonData = {"age_max":65,"age_min":18,"flexible_spec":[{"interests":[{"id":"6002867432822","name":"Beauty"},{"id":"6002991733794","name":"Beauty & Care"},{"id":"6003177110133","name":"Natural Beauty"},{"id":"6003211042524","name":"Health and Beauty Care"},{"id":"6003393295343","name":"Health And Beauty"},{"id":"6003460329503","name":"Beautiful Skin"},{"id":"6004111438209","name":"Facial care"}]}],"genders":[2],"geo_locations":{"countries":["SK"],"location_types":["home","recent"]},"locales":[2,33],"targeting_optimization":"none","publisher_platforms":["facebook"],"facebook_positions":["feed","right_hand_column","instant_article"],"device_platforms":["mobile","desktop"]};
"

发挥作用 - 然后是它的工作。但我需要这个函数来动态地从谷歌电子表格单元格中获取价值。

我不明白 :-/ 你能帮忙从 Google 电子表格单元格中解析 JSON 吗?

【问题讨论】:

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


    【解决方案1】:

    这个示例脚本怎么样?对于您的 json 对象,对象末尾有 ;。这样,它就无法解析。所以;被移除并解析。

    示例脚本:

    function myFunction() {
      var ss = SpreadsheetApp.getActiveSheet();
      var obj = JSON.parse(ss.getRange("A1").getValue().replace(";", ""));
      var res = parseTargeting(obj);
      Logger.log(res)
    }
    

    注意:

    • 在此脚本中,它假定您的 json 对象位于单元格“A1”中。
    • 当您使用此脚本时,请将其复制并粘贴到带有 json 对象的电子表格上的脚本编辑器中。

    如果我误解了你的问题,请告诉我。我想修改它。

    编辑:

    function parseTargeting(range) {
      var content = JSON.parse(range.replace(";", "")); // Modified
      if( range != "undefined" ){
        var flexible_spec = content["flexible_spec"];
        var maxAge = content["age_max"];
        var minAge = content["age_min"];
        var interestsBasics = content["flexible_spec"][0]["interests"][0]["name"];
        Logger.log(interestsBasics);
        var interestsBasicsCelkem = content["flexible_spec"][0]["interests"].length-1;
        var interests = "";
        var output = [];
        for(var i = 0; i<=interestsBasicsCelkem; i++){
          interests += content["flexible_spec"][0]["interests"][i]["name"]+ "\n";  
        }
        var returnVek = "Vek:"+minAge + " - " + maxAge+" \n";
        var returnInterests = "Zájmy:"+interests;
        Logger.log(returnInterests);
        var returnString = returnVek + returnInterests;
      } else {
        var returnString = "No data";
      }
      return returnString; // Added
    }
    

    注意:

    • 对于您的样品表,“A4”和“A7”的值在var interestsBasics = content["flexible_spec"][0]["interests"][0]["name"]; 出现错误。因为值中没有flexible_spec的属性。

    【讨论】:

    • 感谢回复,但它不起作用 :-/ 有一个测试电子表格的链接 - docs.google.com/spreadsheets/d/… 你能看看这个问题吗 - 在这个电子表格中有一个包含数据的列。我需要将这些列解析为另一列。在编辑器脚本是我的脚本,你能看看请告诉我有什么问题吗?我花了很多时间来解决这个问题,但我不明白:-/ thx
    • @libor 很抱歉给您带来不便。并感谢您分享样本表。我注意到你脚本中的returnString 可能是你想要返回的值。所以我修改了你的脚本并更新了我的答案。请证实。如果那个值不是你想要的,我可以问你想要的输出吗?我想通过了解来修改。
    • 太好了,谢谢,现在可以使用了!非常感谢,我很感激
    • @libor 欢迎。谢谢你让我知道。如果您的问题得到解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    • @libor 感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2019-12-14
    相关资源
    最近更新 更多