2013-01-23 11 views
9

में कनवर्ट करने में असमर्थ मुझे मेट ऑफिस डेटापॉइंट एपीआई से JSON पढ़ने के लिए NSJSONSerialization के साथ कोई समस्या है।NSJSONSerialization - डेटा को स्ट्रिंग

मैं निम्न त्रुटि

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Unable to convert data to string around character 58208. 

मैं जाँच की और लगता है कि यह चरित्र स्थिति

{"id":"353556","latitude":"57.1893","longitude":"-5.0929","name":"Sóil Chaorainn"} 

JSON खुद की एक जोड़ी के अनुसार मान्य प्रतीत होता के अनुसार हमलावर लाइन है है मिल सत्यापनकर्ताओं ने कोशिश की, और मैं उम्मीद करता हूं कि यह भी एक बड़े संगठन जैसे मेट ऑफिस से होगा।

एनएसजेएसओएसरियलाइजेशन 'ó' जैसे अक्षरों के साथ ठीक काम नहीं करना चाहिए?

यदि नहीं, तो मैं इस से निपटने के लिए एन्कोडिंग प्रकार को बदलने के बारे में कैसे नहीं जाऊं?

अग्रिम में बहुत धन्यवाद

+0

बनाने के लिए भिन्न JSON पैकेज का प्रयास करें - एक है कि एक NSString स्वीकार करता है - तो आप रूपांतरण के बारे में सुनिश्चित हो सकता है। –

उत्तर

21

मौसम कार्यालय डाटापॉइंट ISO-8859-1 जो ​​NSJSONSerialization के लिए समर्थित डेटा स्वरूप से एक नहीं है में डेटा वापस भेजता है।

इसे कार्य करने के लिए पहले NSISOLatin1StringEncoding के साथ URL सामग्री से एक स्ट्रिंग बनाएं और फिर एनएसयूटीएफ 8 एन्कोडिंग के साथ NSJSONSerialization में NSData का उपयोग करना चाहते हैं।

निम्नलिखित काम करता है इसी json वस्तु

NSError *error; 
NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://datapoint.metoffice.gov.uk/public/data/val/wxfcs/all/json/sitelist?key=<YOUR_API_KEY"] encoding:NSISOLatin1StringEncoding error:&error]; 

NSData *metOfficeData = [string dataUsingEncoding:NSUTF8StringEncoding]; 

id jsonObject = [NSJSONSerialization JSONObjectWithData:metOfficeData options:kNilOptions error:&error]; 

if (error) { 
    //Error handling 
} else { 
    //use your json object 
    NSDictionary *locations = [jsonObject objectForKey:@"Locations"]; 
    NSArray *location = [locations objectForKey:@"Location"]; 
    NSLog(@"Received %d locations from the DataPoint", [location count]); 
} 
+0

मैं निम्नलिखित NSData * डेटा = [NSData डेटा WithContentsOfURL: kMetOfficeAllSites] का उपयोग कर रहा हूं; निम्नलिखित यूआरएल से http://datapoint.metoffice.gov.uk/public/data/val/wxfcs/all/json/sitelist?res=daily&key= फिर NSDictionary * json = [NSJSONSerialization JSONObjectWithData: डेटा विकल्प: kNilOptions त्रुटि: और त्रुटि]; –

+1

बस इसे काम किया। वास्तव में डेटापॉइंट से एन्कोडिंग आईएसओ -885 9 -1 (एनएसआईएसओलाटिन 1) है। आपको बस इसे स्ट्रिंग में प्राप्त करने और इससे यूटीएफ -8 एनएसडीटा बनाने की आवश्यकता है। मैं इसके साथ अपना जवाब अपडेट कर रहा हूं। समाधान के लिए –

+0

बहुत धन्यवाद एरिक। मुझे लगता है कि डेटापॉइंट से सभी JSON को संभालने का यह सबसे अच्छा तरीका होगा क्योंकि इसकी सभी आईएसओ -885 9 -1 होने की संभावना है। क्या मैं पूछ सकता हूं कि आपको एन्कोडिंग प्रकार कैसे मिला? –

4

JSON के लिए एन्कोडिंग क्या है? जेएसओएन को यूटीएफ -8 माना जाता है लेकिन मैंने लुसी एपीआई देखी हैं जहां वे आईएसओ -885 9 -1 का उपयोग करते हैं। NSJSONSerialization केवल यूटीएफ -8, यूटीएफ -16LE, यूटीएफ -16 बीई, यूटीएफ -32LE, यूटीएफ -32 बीई काम करता है।

+0

मुझे एन्कोडिंग की जांच करने का सबसे अच्छा तरीका नहीं है, लेकिन मैंने क्रोम में JSON फ़ीड लोड किया है और उपकरण/एन्कोडिंग के तहत यह कहा गया है कि पश्चिमी (आईएसओ -885 9 -1) ऐसा लगता है कि मैं भाग्य से बाहर हूं, क्या आप फिर से -encode? –

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