从 Google 电子表格单元格解析 Json

lib*_*bor 4 javascript json google-sheets google-apps-script

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

\n\n

{"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"]};

\n\n

它的 JSON 来自 Facebook API,从 Supermetrics 获取。

\n\n

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

\n\n

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

\n\n

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

\n\n
 function parseTargeting(jsonData) {\n\n\n\n\n    var flexible_spec = jsonData["flexible_spec"];\n    var maxAge = jsonData["age_max"];\n    var minAge = jsonData["age_min"];\n\n    var interestsBasics = jsonData["flexible_spec"][0]["interests"][0]["name"];\n\n\n    var interestsBasicsCelkem = jsonData["flexible_spec"][0]["interests"].length-1;\n    var interests = "";\n    var output = [];\n\n    for(var i = 0; i<=interestsBasicsCelkem; i++){\n\n      interests += jsonData["flexible_spec"][0]["interests"][i]["name"]+ "\\n";  \n\n\n    }\n\n    var returnVek = "Vek:"+minAge + " - " + maxAge+" \\n";\n    var returnInterests = "Z\xc3\xa1jmy:"+interests;\n\n\n    var returnString = returnVek + returnInterests;\n\n\n\n  return returnString;\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

该函数始终返回 Undefined。如果我添加这段代码

\n\n
" 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"]};\n"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n

Tan*_*ike 5

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

\n\n

示例脚本:

\n\n
function myFunction() {\n  var ss = SpreadsheetApp.getActiveSheet();\n  var obj = JSON.parse(ss.getRange("A1").getValue().replace(";", ""));\n  var res = parseTargeting(obj);\n  Logger.log(res)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

笔记 :

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

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

\n\n

编辑 :

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

笔记 :

\n\n
    \n
  • 对于您的示例表,“A4”和“A7”的值在 处发生错误var interestsBasics = content["flexible_spec"][0]["interests"][0]["name"];flexible_spec因为value 中没有 的属性。
  • \n
\n