2014-09-25 6 views
0

Я использую node-rest-client для извлечения данных из api. Все идет хорошо, пока я не получаю данные обратно (объект JS), то я не могу получить доступ к атрибутам ответа:Доступ к атрибуту объекта js

console.log("dataObject:", dataObject); 
console.log("dataObject.access_token:", dataObject.access_token); 
console.log("dataObject['access_token']:", dataObject['access_token']); 

выводит его в журнал:

15:12:39 worker.1 | dataObject: {"access_token":"uzJB9nG1ZbpsJaFy","token_type":"bearer"} 
15:12:39 worker.1 | dataObject.access_token: undefined 
15:12:39 worker.1 | dataObject['access_token']: undefined 

Я не Не понимаю, как это возможно!

+1

Добавить 'console.log (typeof dataObject)' – Pointy

+2

Я собираюсь угадать, 'JSON.parse' –

+0

Если это не' JSON.parse() ', попробуйте' dataObject.get ('access_token') ' , Я видел несколько таких ответов API (например, mongoose в режиме схемы) – DrakaSAN

ответ

0

Кажется, данные, которые вы получаете от клиента, находятся в строке. Вы можете быстро попробовать следующее и посмотреть, работает ли он.

dataObject = JSON.parse(dataObject); 

Если бы это был объект, то линия

console.log("dataObject.access_token:", dataObject.access_token); 

напечатает

15:12:39 worker.1 | dataObject: [object Object] 

Однако, я хотел бы предложить, выяснить, почему он приходит в виде строки? проверьте, правильно ли вы отправляете заголовок Content-Type: application/json; charset=utf-8 из API.

Edit:

Похоже, по умолчанию node-rest-client не ожидает application/json;charset=utf-8 (без пробела после запятой). Либо вы можете отправить заголовок из API, как это, или изменить параметры в node-rest-client, как описано here

+0

JSON - это строка. Вот почему он «идет как строка». В этом случае API будет абсолютно правильным. –

+0

API должен отправить заголовок 'content-type' для остального клиента для его анализа как JSON по умолчанию –

+0

Зависит от клиента. 'jQuery' будет анализировать для вас, но я не думаю, что собственный XMLHttpRequest будет. –

1

Все идет хорошо, пока я не получаю данные обратно (а JS объект)

Вот куда вы пошли неправильно. Это не объект javascript, это строка JSON. Отдать здесь:

15:12:39 worker.1 | dataObject: {"access_token":"uzJB9nG1ZbpsJaFy","token_type":"bearer"} 

Большинство (? Возможно все) двигатели Javascript не приложу " вокруг имен свойств (они не являются обязательными) при входе в консоль. Но строка JSON, являющаяся строкой, имеет их.

Таким образом, вы должны быть в состоянии просто:

dataObject = JSON.parse(dataObject); 

И потом:

console.log(dataObject.access_token); 

Вы не показать, как на самом деле получить JSON в первую очередь, но многие библиотеки (например jQuery) будет автоматически parse для вас.

Смежные вопросы