2016-09-01 21 views
12

私はtwitter APIを使っていますが、私は本当に混乱している問題に取り組んでいます。Javascript配列は配列としてアクセスできません

私は次のスクリプトがありますさえずりと対話するために次の関数を呼び出している

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 
    } 
}) 

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 
    ); 
}; 

をそれは私は私が望む結果を得ているよう思えます。素晴らしいです

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

、1人のつぶやきに限定ツイートの配列:私は結果自体がログインすると、私は次の出力を取得します。

私がこの問題を抱えているのは、この配列にアクセスしようとするときです。

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 

私はapi docs for the user_timelineてリードバックが、私はそれを完全に欠けている場合を除き、私は特別な出力の一切の言及を見ていませんよ。

アイデア?

更新

その回答を指摘してくれてありがとう@nicematt。

ちょうどソリューションについて詳しく説明するために、私はこれに私のコードを更新し、今私は私が望む結果取得しています:助けを

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

感謝を!

+5

'' 'JSON.parse(結果)' '' – rottenoats

+2

を 'result'は多分JSON文字列の文字列、であると思われます? – Teemu

+0

これはおそらく長さが3506を返す理由です。 – GuyT

答えて

16

結果はStringであり、あなたはそれをインデックスしている(result[0]0を文字列に変換されるのに対して)、しかしresult.charAt(0)とほとんど同じです)、それはで指定された最初の文字だ-because result[0]"["に等しい理由ですあなたはJSONデータとして結果を解析するのを忘れていました。

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

result.text(文字列)Objectのようなものである(ただし、instanceofはありません)resultので、undefinedで、検索やゲッターは、それ自体で発生することができます。

私も、str[0]str.charAt(0)の違いを示したい:

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

これは最初に書いた端末専用のツールの1つです。私はその文字列がブラウザのコンソールに表示され、それが文字列であることを知ることに慣れています。それを指摘してくれてありがとう。私は私の 'キープイン・マインド'リストにそれを追加しています:) –

関連する問題