通过引用特定属性名称从Javascript JSON对象获取值

时间:2014-07-27 21:02:13

标签: javascript json object google-apps-script google-admin-sdk

我使用Google Apps脚本(Javascript)使用Users.get method中的Google Apps Admin SDK Directory API检索用户的详细信息。

获取用户的代码是:

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

2 个答案:

答案 0 :(得分:1)

根据您对该问题的评论,我怀疑您做过类似的事情:

var userObject = Users.get(/*...args...*/);

...在您用于获取响应的任何层中,因此userObject不是用户对象,它是某种形式的自定义XHR对象。您链接到的文档特别是Java和Python,而不是浏览器端。 (当然,除非使用Java小程序。)

检查文档,很可能是它希望你提供一个回调/ lambda或在该对象上调用一个方法(getContent看起来很诱人)来获得实际的响应。

答案 1 :(得分:1)

作为T.J.帮我发现,Google Apps脚本UrlFetchApp.fetch()方法不会返回Javascript对象。它返回的内容基本上是以JSON表示法构造的字符串,但需要先进行解析。 Google Apps脚本中有一个用于解析JSON结构字符串的内置库。

以下是最终的工作代码:

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=false;

var userJson = UrlFetchApp.fetch(url, fetchArgs);

var userObject = JSON.parse(userJson);

var fullName = userObject.name.fullName;

我了解了JSON.parse()here