存储来自 JSON 对象的数据,这些对象来自 Google 人 Api

Storing data from JSON object received from Google People Api

所以我有一个服务器从 Google 人 api 那里接收有关联系人的数据,我收到的对象具有以下结构:

{ connections:
[ { resourceName: 'people/c3904925882068251400',
   etag: '%EgYBAgkLNy4aDQECAwQFBgcICQoLDA0iDFZUOUE0NkRBZW0wPQ==',
   names:
    [ { metadata: { primary: true, source: [Object] },
        displayName: 'Mihai Vrincut',
        familyName: 'Vrincut',
        givenName: 'Mihai',
        displayNameLastFirst: 'Vrincut, Mihai' },
      { metadata: { source: [Object] },
        displayName: 'Mihai Vrincut',
        familyName: 'Vrincut',
        givenName: 'Mihai',
        displayNameLastFirst: 'Vrincut, Mihai' } ],
   emailAddresses:
    [ { metadata: { primary: true, source: [Object] },
        value: 'mihai.vrincut@gmail.com' } ] },
 { resourceName: 'people/c3275206487406036814',
   etag: '%EgYBAgkLNy4aDQECAwQFBgcICQoLDA0iDHBFVzBUMm8wWU5nPQ==',
   names:
    [ { metadata: { primary: true, source: [Object] },
        displayName: 'aaaaaaaaa',
        givenName: 'aaaaaaaaa',
        displayNameLastFirst: 'aaaaaaaaa' } ] },
 { resourceName: 'people/c5777943907795350059',
   etag: '%EgYBAgkLNy4aDQECAwQFBgcICQoLDA0iDGxOeGYwblg3bFUwPQ==',
   names:
    [ { metadata: { primary: true, source: [Object] },
        displayName: 'costin',
        givenName: 'costin',
        phoneticFamilyName: 'cancius',
        phoneticGivenName: 'costin',
        displayNameLastFirst: 'costin' } ],
   emailAddresses: [ { metadata: { primary: true, source: [Object] }, value: 'hj' } ],
   phoneNumbers:
    [ { metadata: { primary: true, source: [Object] },
        value: '07543532512',
        canonicalForm: '+40754353251' } ] } ], totalPeople: 3}totalItems: 3 }

为了得到这个对象,我使用了 util.inspect() 方法。但是,例如,当我尝试访问名称时,我得到 undefined:

var response=util.inspect(responses,{depth:5}); 
Console.log(response.connections[0].names);

怎么了?

您应该将响应转换为 JSON 对象。 试试这个:

console.log(JSON.parse(response).connections[0].names);

(我假设你在 Javascript 工作)

我要做的是验证答案是否为字符串,你有一个

console.log (typeof response)

如果是字符串,则转换为JSON:

let responseObject = JSON.parse (response);

最后,尝试是否可以访问该对象:

console.log (responseObject.connections [0] .names);

你告诉我你的答案:)

所以,考虑到当时的情况,以及您在评论部分提供的信息。 我假设 responses 已经是一个对象,但是 util.inspect 使它成为一个具有 JSON 语法但在键名前后没有引号 (") 的字符串。这就是你得到的原因

{ connections: ^ SyntaxError: Unexpected token c in JSON at position 2

因此,请尝试查看响应对象。

console.log(responses)

并获取键的名称。和他们

console.log(responses.sth.sthElse.anotherSth.anotherSthElse.lastSth.connections)

看看你是否得到了预期的结果:)