2012-02-04 13 views
5

पर ऑब्जेक्ट्स की एक सरणी को कनवर्ट करना मैं वर्तमान में इंटरनेट डेटा ट्रांसफर के लिए जेएसओएन के उपयोग के साथ प्रयोग कर रहा हूं। मैं JSON स्ट्रिंग प्राप्त करने और इसे NSDictionary में परिवर्तित करने में सफल रहा हूं, लेकिन एक JSON प्रतिनिधित्व में ऑब्जेक्ट्स के सरणी या शब्दकोश को कनवर्ट करने के तरीके को निष्पादित करने में सक्षम नहीं हूं।उद्देश्य-सी/आईओएस: जेएसओएन स्ट्रिंग

मैंने कई पदों और लेखों को पढ़ा है जो बताते हैं कि NSDictionary कुंजी/मूल्य जोड़े के कैसे बनाएं और फिर JSON में कनवर्ट करें, जो एक साधारण सरणी के लिए ठीक काम करता है, लेकिन जब आप सरणी रखते हैं तो आप इसे कैसे प्राप्त करते हैं या वस्तुओं का शब्दकोश।

उदाहरण के लिए, मैं वस्तुओं की "संपर्क" एक सरणी है, जो मैं तो जैसे JSON स्ट्रिंग के रूप में बदल करना चाहते हैं:

"contacts":{ 
    "contact":[ 
    { 
     "id":"1" 
     "first_name":"john", 
     "last_name":"citizen", 
     "phone":"9999 9999" 
    } 
    { 
     "id":"1" 
     "first_name":"jane", 
     "last_name":"doe", 
     "phone":"8888 8888" 
    } 
    ] 
} 

मैं एक NSMutableDictionary है जो संपर्क की एक सूची को पॉप्युलेट है वस्तुओं:

NSMutableDictionary* contactsToBeSynced = [[NSMutableDictionary alloc] init]; 
    //Populate dictionary with contact objects. 
    contactsToBeSynced = self.getNonSynchronisedData; 

मैं तो NSJSONSerialization विधि के साथ वस्तुओं के शब्दकोश को बदलने के लिए प्रयास करते हैं, लेकिन यह एक त्रुटि के साथ विफल रहता है।

NSError* error; 
    NSString* jsonString; 
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:contactsToBeSynced options:NSJSONWritingPrettyPrinted error:&error]; 
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

क्या कोई भी सफलतापूर्वक ऐसा करने में सक्षम है? सही दिशा में कुछ मदद या बिंदु की सराहना करेंगे। चीयर्स।

+0

क्या यह सीखने के लिए है या आप बस काम करना चाहते हैं? क्योंकि उद्देश्य-सी के लिए वहां 5 अच्छी JSON लाइब्रेरी हैं। – user123444555621

उत्तर

5

अपने संरचना के बारे में - अपने contactsToBeSyncedNSDictionary वर्ग का होना चाहिए, और contact एक NSArray विभिन्न संपर्कों के लिए NSDictionary वस्तुओं से युक्त होना चाहिए। वैसे, क्या आपने JSONKit की कोशिश की है? यह धारावाहिक मानक NSJSONSerialization से बेहतर काम करता है।

1

मैं इसे बाहर काम किया ...

मैं संपर्क वस्तुओं का एक NSArray बनाया है और SBJsonWriter साथ SBJson ढांचे का उपयोग कर:

SBJsonWriter *writer = [[SBJsonWriter alloc] init]; 
NSString *jsonString = [writer stringWithObject:arr]; 

मैं संपर्कों की सूची के साथ JSON स्ट्रिंग मिला है।

0

मेरा जवाब "SBJsonWriter Nested NSDictionary" प्रश्न पर देखें। यह बताता है कि एसबीजेसनवाइटर का सही तरीके से उपयोग कैसे करें।

इसमें एसबीजेसनवाइटर त्रुटि जांच शामिल है! और NSDate, नाव, आदि के साथ SBJsonWriter व्यवहार के बारे में सलाह के कुछ टुकड़े ..

अंश:

NSDictionary* aNestedObject = [NSDictionary dictionaryWithObjectsAndKeys: 
             @"nestedStringValue", @"aStringInNestedObject", 
             [NSNumber numberWithInt:1], @"aNumberInNestedObject", 
           nil]; 

NSArray * aJSonArray = [[NSArray alloc] initWithObjects: @"arrayItem1", @"arrayItem2", @"arrayItem3", nil]; 

NSDictionary * jsonTestDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
            @"stringValue", @"aString", 
            [NSNumber numberWithInt:1], @"aNumber", 
            [NSNumber numberWithFloat:1.2345f], @"aFloat", 
            [[NSDate date] description], @"aDate", 
            aNestedObject, @"nestedObject", 
            aJSonArray, @"aJSonArray", 
            nil]; 
0

सामान्य तौर पर, आप प्रत्येक वर्ग के जो ब्याज के क्षेत्र लेता है और उन्हें सम्मिलित करता है के लिए एक toDictionary विधि लिखना शब्दकोश मे। संख्यात्मक फ़ील्ड के लिए आप डालने से पहले NSNumber में कनवर्ट करें। यदि कोई फ़ील्ड ऑब्जेक्ट है, तो आप उस ऑब्जेक्ट पर toDictionary विधि को कॉल करें और परिणाम को अपने शब्दकोश में डालें। यदि आपके पास ऑब्जेक्ट्स की एक सरणी है तो आपको लूप लिखना होगा, लेकिन यह कुछ भी विदेशी नहीं है।

ऑपरेशन को उलट करने के लिए आप प्रत्येक कक्षा के लिए initWithDictionary विधि लिखते हैं।

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