Не удается извлечь свойство JSON из объекта

#javascript #node.js #json #parsing

Вопрос:

У меня есть этот код

 request(options, (error, response) => {
  const data = JSON.parse(response.body)
  //console.log( JSON.stringify(data, null, " ") );
  console.log(data);
})
 

Что дает мне этот результат

 {
 result: 'OK',
 data: {
   body: {
     pdpHeader: [Object],
     overview: [Object],
     hotelWelcomeRewards: [Object],
     propertyDescription: [Object],
     guestReviews: [Object],
     atAGlance: [Object],
     hotelBadge: [Object],
     unavailable: {}
  },
  common: { pointOfSale: [Object], tracking: [Object] }
  },
  transportation: { transportLocations: [ [Object], [Object], [Object] ] },
  neighborhood: { neighborhoodName: 'Manhattan' }
}
 

В фактическом теле этого вывода есть следующее:

 {4 items
"result":"OK"
"data":{2 items
    "body":{14 items
        "pdpHeader":{6 items
            "hotelId":"424023"
            "destinationId":"1506246"
            "pointOfSaleId":"HCOM_US"
 

Я хочу позвонить по номеру телефона отеля: 424023

Я попробовал следующие несколько других модификаций этого, но, похоже, не могу вызвать правильный объект

 console.log(data.body.pdpHeader.hotelID)
 

Но я получаю сообщение об ошибке

 console.log(data.body.pdpHeader.hotelID);
                    ^

TypeError: Cannot read property 'pdpHeader' of undefined
 

Комментарии:

1. Я думаю, ты хочешь data.data.body … и так далее … Я предполагаю, что переменная, содержащая этот объект, называется data … если бы это называлось graham , вы бы использовали graham.data.body … теперь это имеет смысл? ты видишь, где ты ошибся?

2. это не отель, это отель

Ответ №1:

Вы также вызвали свою константу data , так что вам нужно будет либо уничтожить, либо позвонить .data снова, вот так.

Уничтожить

Вы можете уничтожить свойство на своей data константе вот так:

 const { data } = JSON.parse(response.body)
// data.body.pdpHeader.hotelID
 

Назначение

Если вы не хотите разрушать, позвоните data.data , как указано ниже.

 const data = JSON.parse(response.body)
// data.data.body.pdpHeader.hotelID