2016-09-01 74 views
12

Ben twitter API ile çalışıyorum ve gerçekten kafa karıştırıcı bir konu isabet ediyorum. twitter ile etkileşim aşağıdaki işlevi çağıranJavascript dizisi bir dizi olarak erişilebilir değildir

const Twitter = require('twitter-api-stream') 
const twitterCredentials = require('./credentials').twitter 

const twitterApi = new Twitter(twitterCredentials.consumerKey, twitterCredentials.consumerSecret, function(){ 
    console.log(arguments) 
}) 

twitterApi.getUsersTweets('everycolorbot', 1, twitterCredentials.accessToken, twitterCredentials.accessTokenSecret, (error, result) => { 
    if (error) { 
     console.error(error) 
    } 
    if (result) { 
     console.log(result) // outputs an array of json objects 
     console.log(result.length) //outputs 3506 for some reason (it's only an array of 1) 
     console.log(result[0]) // outputs a opening bracket ('[') 
     console.log(result[0].text) // outputs undefined 
    } 
}) 

: İstediğim sonucu alıyorum gibi

TwitterApi.prototype.getUsersTweets = function (screenName, statusCount, userAccessToken, userRefreshToken,cb) { 
    var count = statusCount || 10; 
    var screenName = screenName || ""; 

    _oauth.get(
     "https://api.twitter.com/1.1/statuses/user_timeline.json?count=" + count + "&screen_name=" + screenName 
     , userAccessToken 
     , userRefreshToken 
     , cb 
    ); 
}; 

O görünüyor

Aşağıdaki komut dosyası var. harika

[ 
    { 
    "created_at": "Thu Sep 01 13:31:23 +0000 2016", 
    "id": 771339671632838656, 
    "id_str": "771339671632838656", 
    "text": "0xe07732", 
    "truncated": false, 
    ... 
    } 
] 

, 1 tweet sınırlı tweet dizisi: Ben sonuca kendisi oturum açtığınızda aşağıdaki çıktıyı almak.

Bu diziye erişmeye çalıştığımda karşılaştığım sorun.

console.log(result.length) //outputs 3506 for some reason (it's only an array of 1) 
console.log(result[0]) // outputs a opening bracket ('[') 
console.log(result[0].text) // outputs undefined 

Ben api docs for the user_timeline içinden geri okumak ama tamamen eksik sürece özel çıkışının herhangi bir söz göremiyorum.

Herhangi bir fikrin var mı?

Güncelleme

sayesinde bunun cevabını işaret için @nicematt. Sadece çözümü üzerinde durmaya

, buna kodumu güncellenmiş ve şimdi istediğim sonucu alıyorum: Yardım için

if (result) { 
    let tweet = JSON.parse(result)[0] // parses the json and returns the first index 
    console.log(tweet.text) // outputs '0xe07732' 
} 

teşekkürler!

+5

'' 'JSON.parse (sonuçlar)' '' – rottenoats

+2

O result', belki bir JSON dize dize 'görünüyor ? – Teemu

+0

Evet, bu nedenle uzunluk 3506 değerini döndürüyordur. – GuyT

cevap

16

Sonucu bir String olduğunu ve ilk karakteri belirtilen oluyor -çünkü result[0]"[" eşittir neden (result[0] (0 oysa bir dizeye dönüştürülür) olsa result.charAt(0) hemen hemen aynıdır), bu onu dizine ekledikleri Sonucu JSON verileri olarak ayrıştırmayı unuttunuz. result (bir dize) bir Object gibidir (ama instanceof değildir) ve aramaları ve odaklar kendi içinde olmasına izin beri

JSON.parse(result).length // probably 1 

Ve result.textundefined olduğunu.

Ben de str[0] ve str.charAt(0) arasındaki farkı göstermek istiyorum:

str[0] // same as str['0'], but a getter. 0 converts to 
     // string (because every key of an object 
     // is string in ECMAScript) 

str.charAt(0) // get/lookup String#charAt, call it 
       // without new `this` context and with arguments list: 0 
+1

Bu, yazdığım ilk yalnızca terminal araçlarımdan biridir. Bu dizenin tarayıcının konsolunda karşılaştığını ve bir dizenin olduğunu görmeye alışığım. Bunu işaret ettiğin için teşekkürler. Bunu 'aklımda tut' listemde ekliyorum :) –