Использование javascript для получения данных JSON (из Tumblr)

Я пытаюсь читать сообщения Tumblr через JSON API.

Используя их API, данные передаются обратно следующим образом:

var tumblr_api_read= {
 "posts":[
   "id":"1234",
   "regular-title":"This is the title of the post",
   "regular-body":"This is the body of the post"
 ]
}

У меня проблемы с возвратом "regular-title" и "regular-body".

Мой код JS выглядит так:

var tumblr= tumblr_api_read['posts'];
for (eachPost in tumblr)
{
 var id=posts[eachPost].id; //Works fine
 var regularTitle=posts[eachPost].regular-title; //Returns NaN
}

Я предполагаю, что это потому, что в записях [eachPost] .regular-title есть тире, но я не могу найти никакой документации о том, как заставить его работать в этой ситуации!

Спасибо.


person Matt    schedule 18.02.2011    source источник
comment
posts - это массив; не используйте for ... in для перебора массива, используйте for(i = 0; i < posts.length; i += 1). См. Также этот вопрос: stackoverflow.com/questions/500504/   -  person Martijn    schedule 18.02.2011


Ответы (2)


Имена переменных javascript не могут содержать специальные символы, такие как - в вашем примере. Если у вас есть свойство со специальными символами в имени, единственный способ получить к нему доступ - использовать метод [], который вы использовали для доступа к объекту posts выше, который дает вам возможность передать имя свойства в виде строки.

var regularTitle = posts[eachPost]['regular-title'];
person Tom Tu    schedule 18.02.2011
comment
Я подумал, что это было что-то легкое. Спасибо за такой быстрый ответ. Это сработало отлично. :) - person Matt; 18.02.2011
comment
На это легко попасть, когда вы начинаете с javascript. Рад, что помогли :) - person Tom Tu; 18.02.2011

Чтобы уточнить, вы на самом деле ссылаетесь на regular-title в точечной нотации, как если бы это был объект. Но на самом деле это массив, и поэтому он не работал бы, даже если бы в значении свойства не было тире, как упоминалось выше.

person tim    schedule 18.05.2013