2010-07-26 24 views
5

मैं नए फेसबुक जे एस एसडीकेनई ग्राफ़ एपीआई से लौटे JSON उत्तर डेटा तक पहुंचने में परेशानी हो रहा है कहता है।एक्सेस करना डेटा()

उदाहरण के लिए, उनके डॉक्स, जहां वे SDK का उपयोग करने का पुराना तरीका उपयोग कर रहे हैं में से कुछ में, वे डेटा के लिए सूचक प्रतिक्रिया से प्राप्त [0]

लेकिन यहाँ है, यह दिखा रहा है कि आप उपयोग करने की आवश्यकता respond.data [0] इसके बजाय: http://developers.facebook.com/tools/console/ (fb.api - फोटो-एल्बम पर क्लिक करें)

तो यह कौन है? मुझे पता है कि नीचे दिए गए मेरे कोड के साथ, यदि मैं लौटाए गए JSON पर प्राप्त करने के लिए प्रतिक्रिया [0] वाक्यविन्यास का उपयोग करने का प्रयास करता हूं तो मुझे अपरिभाषित किया जाता है।

अगर मैं प्रतिक्रिया का उपयोग [0] .length मैं भी अपरिभाषित मिल

लेकिन अगर मैं response.data कोशिश [0] .length मैं 2 जो मुझे लगता है कि लौटे JSON या मेरी 2 albums..I है मिल सिंटैक्स के संदर्भ में इस बदले ऑब्जेक्ट के साथ कैसे खेलें और इसकी कुशलताएं, इसके गुणों आदि को कैसे खेलना है,

मैं अंत में jQuery parseJSON विधि का उपयोग कर लौटे हुए JSON को पार्स करना चाहता हूं लेकिन कोई सुराग नहीं है प्रतिक्रिया के लिए यहां सही वाक्यविन्यास भी पास करने के लिए और उस प्रतिक्रिया ऑब्जेक्ट का उपयोग करें।

FB.api(uri, function(response) 
{ 
    alert("response: " + response); 

    // check for a valid response 
    if (response == "undefined" || response == null || !response || response.error) 
    { 
     alert("error occured"); 
     return; 
    } 

    alert("response length: " + response.data.length); 
} 

इस चेतावनी ने मुझे 2 दिया जो समझ में आता है। मेरे पास 2 एलबम हैं I

तब मैंने प्रतिक्रिया.data [0] जैसी कुछ कोशिश की और उस पर एक jQuery parseJSON(response.data) या parseJSON(response.data[0]) की कोशिश की और यह काम नहीं करता है। तो क्या कोई मुझे फेसबुक के संबंध में यहां प्रतिक्रिया वस्तु की व्याख्या कर सकता है? मुझे उस लौटे ऑब्जेक्ट का उपयोग करने के तरीके के बारे में कोई दस्तावेज़ नहीं दिखता है और यह कैसे बनाया गया है।

UPDATED:

ठीक है, इसलिए यहाँ पूरे पार्स विधि का प्रयास है कि मैं अब तक बाहर टोंटदार गया है। मुझे नहीं पता कि jQuery पार्सिंग अभी तक 100% अच्छा कोड है, मैं उस तरह से स्टब किया गया हूं लेकिन मैं तब तक इसका परीक्षण नहीं कर सकता जब तक कि मुझे पता न लगे कि इस प्रतिक्रिया वस्तु का उपयोग कैसे किया जाए। मुझे पता है कि यह जेएसओएन लौट रहा है क्योंकि मैंने जेएस एसडीके में एक और विधि में एक और फेसबुक प्रतिक्रिया ऑब्जेक्ट पार्स किया है, इसलिए यह सुनिश्चित है कि प्रतिक्रिया [0] या respond.data [0] आपको JSON स्ट्रिंग देगा।

function GetAllFacebookAlbums(userID, accessToken) 
{ 
    alert("inside GetAllFacebookAlbums(userID, acessToken)"); 

    var dFacebookAlbums = {}; // dictionary 
    var uri = "/" + userID + "/albums?access_token=" + accessToken; 
    //var uri = "/me/albums"; 

    alert("get albums uri: " + uri); 

    FB.api(uri, function(response) 
    { 
     alert("response: " + response); 

     // check for a valid response 
     if (response == "undefined" || response == null || !response || response.error) 
     { 
      alert("error occured"); 
      return; 
     } 

     alert("response length: " + response.data.length); 

     for (var i=0, l=response.data.length; i<l; i++) 
     { 
      alert("response[key]: " + response.data[i].Name); 
     } 

     // parse JSON from response 
     var dJSONObjects = jQuery.parseJSON(response.data); 

     alert("dJSONObjects: " + dJSONObjects); 

     if (dJSONObjects.length == 0) 
      return; 

     // iterate through the dictionary of returned JSON objects 
     // and transform each to a custom facebookAlbum object 
     // then add each new FacebookAlbum to the final dictionary 
     // that will return a set of facebookAlbums 
     $.each(json.attributes, function() { 
      // add a new album to the dictionary 
      aFacebookAlbums[i] = FacebookAlbum(
               jsonObject["id"], 
               jsonObject["name"], 
               jsonObject["location"], 
               jsonObject["count"], 
               jsonObject["link"] 
              ); 
     }); 
    }); 

    return dFacebookAlbums; 
} 

उत्तर

0

मैंने एपीआई को नहीं देखा है, लेकिन मुझे संदेह है कि एफबी आपको जेएसओएन एन्कोडेड स्ट्रिंग को सरणी में देगा। क्या आपने प्रतिक्रिया.data [0] .someproperty तक पहुंचने का प्रयास किया है?

+0

हां, कोशिश की लेकिन अपरिभाषित भी हो गया। मैं लौटा JSON स्ट्रिंग को पार्स करना चाहता हूं। वे जेएसओएन वापस भेजते हैं मुझे लगता है ... बहुत यकीन है। – PositiveGuy

+0

@coffeeaddict: तो 'चेतावनी (प्रतिक्रिया.data [0] .name); 'कुछ भी नहीं करता है? मुझे वह उदाहरण दिखाई नहीं देता है जिसे आपने हाथ से किसी भी पार्सिंग करने के लिए लिंक किया है, जिसे एपीआई लाइब्रेरी द्वारा संभाला जाता है इससे पहले कि यह आपके कॉलबैक को भी कॉल करे। –

+0

असल में यह वही बात है जिसकी मैंने कोशिश की..नाम क्योंकि प्रत्येक एल्बम का नाम संपत्ति है। लेकिन मुझे एक और बार कोशिश करने दो। मैं अपना पार्सिंग पोस्ट करूंगा..यह मेरे उदाहरण में उस चेतावनी के बाद होता है लेकिन क्योंकि मुझे अपरिभाषित हो रहा है क्योंकि शायद मुझे नहीं पता कि मैं क्या वापस आ रहा हूं या उस वस्तु का उपयोग कैसे करें, मेरा पार्सिंग भी विफल रहता है अपरिभाषित। – PositiveGuy

0

यदि कोई त्रुटि नहीं है, तो प्रतिक्रिया डेटा होना चाहिए जो आप चाहते हैं (यह ज्यादातर मामलों में एक सरणी होगी) यदि आप नए ग्राफ एपीआई का उपयोग कर रहे हैं। यदि आप अनिश्चित हैं कि आप वापस क्या प्राप्त कर रहे हैं तो आप हमेशा JSON स्ट्रिंग को अलर्ट कर सकते हैं।

2

सामान्य रूप से, जेएस एसडीके JSON ऑब्जेक्ट वापस नहीं करता है लेकिन यह एक ऑब्जेक्ट देता है जो JSON ऑब्जेक्ट के समान संरचित होता है।

उदाहरण के लिए कहें: एक उपयोगकर्ता घटना डेटा के लिए मतदान कर रहा है और ग्राफ एपीआई संदर्भ (http://developers.facebook.com/docs/reference/api/event) के अनुसार, लौटाए गए डेटा में गुण होंगे http://developers.facebook.com/docs/reference/api/event

घटनाओं डेटा के लिए JSON ऑब्जेक्ट इस तरह यदि आप PHP एसडीके

सरणी ([डेटा] => सरणी ([0] => सरणी ([नाम] => नमूना घटना [START_TIME का उपयोग कर रहे हैं ] => 2010-08-09 टी 22: 00: 00 + 0000 [end_time] => 2010-08-10T01: 00: 00 + 0000 [स्थान] => कार्यालय में \ [id] => xxxxxxxx [rsvp_status] => भाग लेना)) [पेजिंग] => सरणी ([पिछले] => हाइपरलिंक [अगला] => हाइपरलिंक))

लेकिन अगर आप जे एस SDK का उपयोग कर रहे हैं, तो वापस आ प्रतिक्रिया इस

response.data तरह होगा [0 ... n]। विशेष तालिका के गुण जो आप Acce हैं ssing। तो, ईवेंट तालिका के मामले में यह इस तरह होगा:

प्रतिक्रिया.data [0 ... n] .name या respond.data [0 ... n] .id, respond.data [0] ... एन] .end_time, आदि

4

यह उपयोग किए जा रहे एपीआई पर निर्भर करता है। नए ग्राफ एपीआई एकल ऑब्जेक्ट्स के लिए शीर्ष स्तर ऑब्जेक्ट के रूप में वापस आते हैं: http://graph.facebook.com/naitik - जहां संग्रह शीर्ष स्तर डेटा संपत्ति के साथ वापस आते हैं जो Array: http://graph.facebook.com/zuck/feed है। चीजों को कुछ आसान बनाने के लिए आत्मनिरीक्षण भी है: http://developers.facebook.com/docs/api#introspectionFQL अन्य लोकप्रिय एपीआई कॉल है, और यह वह जगह है जहां शीर्ष स्तर की प्रतिक्रिया सरणी है (एसक्यूएल में पंक्तियां सोचें) यही कारण है कि कुछ उदाहरण response[0] का उपयोग करते हैं। सबसे आसान बात यह है कि बस अपने ब्राउज़र में या कर्ल के माध्यम से प्रतिक्रिया देखें और देखें कि यह कैसा दिखता है।

1

क्या यह कभी पता चला है। कोई भी कुछ स्वीकार नहीं किया।

alert("response[key]: " + response.data[i].Name); 

ऊपर कोड Name और नहीं name है। इसके अलावा, जैसा कि मैटी ने ऊपर बताया, यह काम करता है:

response.data[0].name 

बस मेरे दो सेंट। @CoffeeAddict, कुछ प्रशंसा दिखाने के लिए जवाब स्वीकार करें ... ऐसा लगता है कि आपके साथ किसी के प्रतिनिधि की सराहना होगी। : ओ)

3

केवल आपके सभी लोग FB.api के लिए नए हैं के लिए स्पष्ट करने के लिए (के रूप में मैं कर रहा हूँ) ग्राफ प्रश्नों अलग आकार का डेटा ... लौट यहां दो उदाहरण हैं: FB.api('me/' function(returnData) { }) returnData

में निम्न डेटा रखा
{ 
    "id": "592529630", 
    "name": "Hugh Abbott", 
    "first_name": "Hugh", 
    "last_name": "Abbott", 
    } 

तो अगर मैंने कहा returnData.first_name मैं मिलेगा "ह्यूग"

यदि फिर भी मेरी क्वेरी अपने दोस्तों के बारे में था, मैं निम्न क्वेरी FB.api('me/friends/' function(returnData) { }) और मेरे डेटा के आकार चला सकता है अब अलग है :

"data": [ 
    { 
     "name": "Tom Bell", 
     "id": "36801805" 
    }, 
    { 
     "name": "Michael Royce", 
     "id": "199712888" 
    }, 
] 

... तो वापसी डेटा अब एक सरणी है ... मूल्यों को पुनर्प्राप्त करने के लिए, मैं निम्नलिखित की तरह कुछ करूंगा।

returnData.data[0].name इस वापसी होगी "टॉम बेल"

मुझे आशा है कि इस मदद करता है, के रूप में मैं कुछ ही घंटों जहाँ मैं गलत हो गया था बिताया सोच ... यह पता चला है, यह सब डेटा के आकार में है! !!! शुभकामनाएं मेरे दोस्तों।

ह्यूग

0

मुझे यकीन है कि यह अब और विचार Graph API explorer स्पष्ट रूप से फार्म का है कि यह दिया जाता है में डेटा प्रदर्शित करता है एक मुद्दा नहीं होना चाहिए हूँ। आप प्रतिक्रियाओं की संरचना में अंतर के बारे में सही हैं, लेकिन व्यक्तिगत रूप से यह देखने के लिए उपयोगी रहा है कि एक्सप्लोरर का उपयोग करके कौन सा डेटा लौटाया गया है और तदनुसार वाक्यविन्यास का उपयोग करें।

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