【发布时间】:2014-09-19 01:46:58
【问题描述】:
我正在使用 Google Apps 脚本 (Javascript) 来检索使用 Google Apps Admin SDK Directory API 中的 Users.get method 的用户的详细信息。
获取用户的代码是:
var url = 'https://www.googleapis.com/admin/directory/v1/users/'+email+'?key='+publicApiAccessKey;
var scope = "https://www.googleapis.com/auth/admin.directory.user.readonly";
var fetchArgs = googleOAuth_("Users",scope);
fetchArgs.method = "GET";
fetchArgs.muteHttpExceptions=true;
var userObject = UrlFetchApp.fetch(url, fetchArgs);
响应是 Google Apps Admin SDK User resource 和以下格式的对象:
{
"kind": "admin#directory#user",
"id": string,
"etag": etag,
"primaryEmail": string,
"name": {
"givenName": string,
"familyName": string,
"fullName": string
},
"isAdmin": boolean,
"isDelegatedAdmin": boolean,
"lastLoginTime": datetime,
// rest of the properties excluded
}
我如何获得 fullName 的值?
这是我迄今为止尝试过的,但没有成功:
Logger.log( Object.prototype.toString.call(userObject) ); // returns [object JavaObject]
Logger.log( userObject.name.fullName ); // Cannot read property "fullName" from undefined.
Logger.log( userObject.fullName ); // undefined
Logger.log( userObject.name ); // undefined
Logger.log( userObject['fullName'] ); // undefined
Logger.log( userObject['name'] ); // undefined
Logger.log( userObject['name','fullName'] ); // undefined
【问题讨论】:
-
userObject显然不是所描述的对象。如果是,那么您的userObject.name.fullName将是正确的。我建议Logger.log(userObject);和/或for (var name in userObject) { Logger.log(name); }和/或Object.prototype.toString.call(userObject);弄清楚它是什么。例如,它可以是一个 array 吗?typeof anArray返回"object"。我不明白为什么它会返回一个数组,但是... -
嗯,好的。
Object.prototype.toString.call(userObject)返回[object JavaObject]和for (var name in userObject) { Logger.log(name); }似乎只是列出了对象的方法(与我在键入 userObject 后跟一个点时得到的自动完成代码建议相同:[14-07-27 17:21:45:843 EDT] getResponseCode [14-07-27 17:21:45:843 EDT] getContentText [14-07-27 17:21:45:844 EDT] getContent [14-07-27 17:21:45:844 EDT] getAs [14-07-27 17:21:45:844 EDT] getHeaders [14-07-27 17:21:45:844 EDT] getBlob [14-07-27 17:21:45:845 EDT] toString [14-07-27 17:21:45:845 EDT] getAllHeaders -
旁注:如果它已被反序列化(并且如果
typeof表示除"string"以外的任何内容),它就不再是“JSON 对象”了。它是一个对象。 JSON 是一种用于数据交换的文本表示法。 -
不,与Java无关,但不确定是否与GWT有关。我在 Google Apps Script 脚本编辑器中运行此代码,该编辑器基本上是沙盒化的 Javascript。令我困惑的是,在the documentation for this get method 中,它只是说如果成功,此方法在响应正文中返回一个用户资源。,描述资源的页面显示“使用以下 JSON 模板用于 Directory API 中的用户资源”,但没有告诉您如何从中检索值。
-
找到它:(developers.google.com/apps-script/reference/url-fetch/…)。让我读一下这个。
标签: javascript json object google-apps-script google-admin-sdk