【问题标题】:Storing data from JSON object received from Google People Api存储从 Google People Api 接收的 JSON 对象的数据
【发布时间】:2018-01-17 22:30:25
【问题描述】:

所以我有一个服务器从 Google People 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() 方法。但是,例如,当我尝试访问名称时,我得到未定义:

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

怎么了?

【问题讨论】:

  • 如果你记录 response.connections[0] 会得到什么?
  • TypeError: 无法读取未定义的属性“0”
  • console.log(response) 怎么样?
  • 请在您的问题中添加完整的http请求
  • 给出我在问题中发布的输出。

标签: javascript json google-people-api


【解决方案1】:

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

{ 连接:^ SyntaxError: JSON 中第 2 位的意外标记 c

所以,请尝试检查响应对象。

console.log(responses)

并获取键的名称。和他们一起

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

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

【讨论】:

    【解决方案2】:

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

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

    (我假设您正在使用 Javascript)

    【讨论】:

    • { 连接:^ SyntaxError:JSON 中位置 2 的意外标记 c
    • 如果避免使用 util.inspect 会怎样?尝试先解析“响应”
    • [object Object] ^ SyntaxError: 位置 1 处 JSON 中的意外标记 o
    • 你需要检查响应 obj 直到你得到连接
    【解决方案3】:

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

    console.log (typeof response)
    

    如果是字符串,转成JSON:

    let responseObject = JSON.parse (response);
    

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

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

    你告诉我你的答案:)

    【讨论】:

    • 我得到 { connections: ^ SyntaxError: Unexpected token c in JSON at position 2
    • console.log (typeof response) ==> 他返回控制台的是什么?
    • 响应是字符串
    • 一开始提出的问题的答案就像一串文本,而不是对象或数组,这就是为什么它会给你一个错误。尝试用这个函数转换它: let responseObject = JSON.parse (response);文档:w3schools.com/js/js_json_parse.asp 然后这样做:console.log (responseObject);你告诉我控制台的结果是什么。 (Y)
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多