2012-10-18 12 views
7

भिन्न हो सकती है क्या निम्न कथन सही है, या क्या मुझे कुछ याद आ रही है?NSJSONSerialization से लौटाई गई वस्तु

आप NSJSONSerialization की वापसी वस्तु की जांच करने के अगर यह एक शब्दकोश या किसी सरणी है देखना है - आप

data = {"name":"joe", "age":"young"} 
// NSJSONSerialization returns a dictionary 

और

data = {{"name":"joe", "age":"young"}, 
    {"name":"fred", "age":"not so young"}} 
// returns an array 

प्रत्येक प्रकार हो सकता है एक अलग अभिगम विधि है जो गलत पर इस्तेमाल होने पर तोड़ता है। उदाहरण के लिए:

NSMutableArray *jsonObject = [json objectAtIndex:i]; 
// will break if json is a dictionary 

ताकि आप की तरह कुछ करने के लिए -

id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData 
     options:NSJSONReadingMutableContainers error:&error]; 

    if ([jsonObjects isKindOfClass:[NSArray class]]) 
     NSLog(@"yes we got an Array"); // cycle thru the array elements 
    else if ([jsonObjects isKindOfClass:[NSDictionary class]]) 
     NSLog(@"yes we got an dictionary"); // cycle thru the dictionary elements 
    else 
      NSLog(@"neither array nor dictionary!"); 

मैं ढेर अतिप्रवाह और एप्पल प्रलेखन और अन्य स्थानों के माध्यम से एक नज़र डाली और इसके बाद के संस्करण के किसी भी प्रत्यक्ष पुष्टि नहीं पा सके ।

+0

आप क्या समस्या अपने कोड के साथ चल रहा था का उल्लेख नहीं था। –

+0

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

उत्तर

5

यदि आप सिर्फ यह पूछ रहे हैं कि यह सही है या नहीं, तो यह jsonObjects को संसाधित करने का सुरक्षित तरीका है। यह भी है कि आप इसे अन्य एपीआई के साथ कैसे करेंगे जो id देता है।

+0

ठीक है - इसके लिए धन्यवाद - NSJSONSerialization के उपयोग पर बहुत सारे प्रश्न हैं और रिटर्न प्रकार की जांच नहीं कर रहे हैं (या हमेशा मानते हैं कि यह परिवर्तनीय नहीं है)/सूक्ष्म गोचा था। इस पोस्ट का उद्देश्य पुष्टि और स्पष्टीकरण देना था। – user1705452

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