2016-09-01 23 views
12

के रूप में सुलभ नहीं है मैं ट्विटर एपीआई के साथ काम कर रहा हूं और मैं वास्तव में भ्रमित करने वाली समस्या को मार रहा हूं।जावास्क्रिप्ट सरणी एक सरणी

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.parse(result).length // probably 1 

और result.textundefined है के बाद से result (एक स्ट्रिंग) एक Object की तरह है (लेकिन instanceof नहीं है) और लुकअप और ही टिककर खेल अपने आप में होने की अनुमति देते हैं।

मैं 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

यह मेरे द्वारा लिखे गए पहले टर्मिनल-केवल टूल में से एक है। मुझे लगता है कि स्ट्रिंग ब्राउज़र के कंसोल में आती है और यह देखकर कि यह एक स्ट्रिंग है। यह बात बताने के लिए धन्यवाद। मैं अपने 'इन-इन-दिमाग' सूची में जोड़ रहा हूं :) –

संबंधित मुद्दे