使用Google Apps脚本访问JSON中的未定义对象

时间:2018-08-10 18:11:14

标签: json google-apps-script telegram-bot

我正在研究电报机器人项目,我需要确定收到的rugarch:::.information.test(likelihood(fit@mfit$ufit), nObs = nrow(fitted(fit@mfit$ufit)), nPars = 4)$AIC 文件的类型。

例如,一条消息将具有:

JSON

据此我知道{ "update_id": 12345, "message": { "message_id": 123, "from": { "id": 123456, "is_bot": false, "first_name": "John", "last_name": "Tan", "username": "John123", "language_code": "en-SG" }, "chat": { "id": 123456, "first_name": "John", "last_name": "Tan", "username": "John123", "type": "private" }, "date": 1533567761, "text": "/start", "entities": [ { "offset": 0, "length": 6, "type": "bot_command" } ] } } 存在。在这种情况下:

message.message_id

但是,其他类型的if (e.postData.contents.message.message_id) { // would run fine } 将没有消息对象。 的其他来源推荐了此功能

JSON

但是,在我什至无法运行此功能之前,Google Apps脚本似乎都会抛出function isMsg(fn) { try { fn; return true; } catch(e) { return false; } } 。我这样运行:

TypeError

还有其他解决方法吗?


编辑:T.J. Crowder在下面回答了我的问题。这个想法是,如果还缺少高级对象,则需要“防护”。为了防止typeError:无法读取未定义的“内容”,请使用:

if (ifMsg(e.postData.contents.message.message_id)) {
    // exception
}

{
  "message": "Cannot read property \"message_id\" from undefined.",
  "name": "TypeError"
}

对于我来说,这对我有用:

if(level1 && level1.level2 && level1.level2.level3){
    //should run fine
}

这对我来说是有效的,因为内容始终存在。我发现它解决了我的问题。

1 个答案:

答案 0 :(得分:0)

您需要像这样使用警卫:

if (e.postData.contents.message && e.postData.contents.message.message_id) {

另请参阅this question's answers;那个发问者对那样的防卫不满意。