Friday 15 July 2011

iphone - JSONKit giving parse error but JSONLint.org says it's valid -


यहाँ मेरी पोस्ट। जेसन फाइल है:

  [{"शीर्षक": "परिचय WCF "," यूआरएल ":" http: // myaddress / videos / introduction-to-wcf "," थंबनेल ":" http: //myaddress/images/20110212_01.jpg "," Exceprt ":" WCF का परिचय " , "पोस्टडेट": "2011-02-12T14: 26: 07", "आईडी": 39, "एमपी 4 वीडियो": "http: //myaddress/2012/05/20110212_01.mp4", "स्पीकर": [{" नाम ":" मार्क विल्किनसन "," स्लग ":" मार्क-विल्किनसन "}]," समूह ": [{" नाम ":" सी # यूजी "," स्लग ":" सीएस-यू "}]," टैग्स " : [["नाम": "डब्ल्यूसीएफ सेवा", "स्लग": "wcf-services"}}}]   

इसे jsonlint.org में पोस्ट करें और यह मान्य है।

यहाँ जो कोड है मैं अन्य JSON फाइलों के लिए उपयोग कर रहा हूं जो काम कर चुका है:

  - (शून्य) test_can_read_from_groups_file_and_build_JSONDictionary {id परिणाम = [आत्म data_from_JSON_file: @ "post"]; [आशय है नॉट नील: परिणाम]; // शून्य के रूप में लौट रहा है, इसलिए परीक्षण असफल है} - (आईडी) data_from_JSON_file: (NSString *) फ़ाइलनाम {एनएसबींडल * बंडल = [एनएसबींडल बंडल फोरेक्सास: [आत्म वर्ग]]; NSString * jsonString = [बंडल पथफॉरससोर्सः फाइलनाम का प्रकार: @ "जेसन"]; एनएसडीटा * डेटा = [एनएसडीटा डेटाविड्थ कंटेंटऑफ़फ़ाइल: जेसनस्ट्रिंग]; JSONDecoder * डिकोडर = [[JSONDecoder alloc] initWithParseOptions: JKParseOptionNone]; NSError * त्रुटि = शून्य; आईडी परिणाम = [विकोडक ऑब्जेक्ट के साथडेटा: डेटा त्रुटि: & amp; त्रुटि]; अगर (त्रुटि) {एनएसएलॉग (@ "********* \ r \ r \ r \ r \ r \ r त्रुटि थी:% @", [त्रुटि स्थानीयकृतलेखन]); } वापसी परिणाम; }   

त्रुटि जो JSONKit ऑब्जेक्ट से छपी हुई है:

  त्रुटि थी: अनपेक्षित टोकन, चाहता था '{', '}', '[', ']', ',', ':', 'True', 'false', 'null', '' STRING '', 'NUMBER'   

ईटीए: हाँ यह बिल्ड चरणों में है:

छवि विवरण यहां दर्ज करें

जोड़ा गया:

  यदि (! डेटा) {एनएसएलॉग (@ "\ r \ r \ r \ r \ r \ r% s : डेटा शून्य था ", __FUNCTION__); वापसी शून्य; }   

यह इस शाखा को नहीं मार रहा है इसलिए डेटा शून्य नहीं है।

JSONKit डीकोडर का उपयोग करके इसका बदला:

  आईडी परिणाम = [एनएसजेएसएएनएसरायलियाजेशन JSONObjectWithData: डेटा विकल्प: kNilOptions त्रुटि: & amp; त्रुटि];   

और यह काम करता है, फिर भी यह हैरान है कि क्यों JSONKit मेरे लिए असफल हो रहा है लेकिन रोब के लिए नहीं।

जैसा कि pst ने बताया है, समस्या निकलती है। Xcode में, अगर आप फ़ाइल नाम पर राइट-क्लिक करते हैं, "इस रूप में खोलें" चुनें और "हेक्स" चुनें, आप देखेंगे:

 hex dump

ये पहले तीन अक्षर स्पष्ट रूप से मानक पाठ अक्षर नहीं हैं I सौभाग्य से, आप इन तीनों वर्णों को हेक्स एडिटर में Xcode में हाइलाइट कर सकते हैं, उन्हें हटा सकते हैं, फ़ाइल को सहेज सकते हैं, और अब इसे ठीक करना होगा।


मूल उत्तर:

इसके अलावा, आप यकीन है कि JSON अपने बंडल में शामिल किया गया था रहे हैं कोको मानक JSON पार्स वर्ग, NSJSONSerialization <के साथ अपने JSON। मैं सिर्फ पार्स (अपने "लक्ष्य सेटिंग के" के चरण का निर्माण "में" कॉपी बंडल संसाधन "जाँच) । / code>, घटना के बिना शायद आप डेटा की जांच और यह सुनिश्चित करें सब कुछ ठीक है बनाने:

  NSLog (@ "डेटा =% @", [[ [NSString alloc] initWithData: डेटा] autorelease]);   

लेकिन मैं दोनों JSONKit और NSJSONSerialization के साथ अपने JSON पार्स घटना के बिना।

  NSString * फ़ाइल नाम = [[NSBundle mainBundle] pathForResource: @ "परीक्षण" ofType: @ "json"]; NSData * डेटा = [NSData dataWithContentsOfFile: फ़ाइल नाम], अगर (डेटा!) { एनएसएलॉग (@ "% s: डेटा शून्य था", __FUNCTION__); ​​वापसी;} जेएसओडैकोडर * डिकोडर = [[जेएसऑनडिकोडर एलोक] initWithParseOptions: JKParseOptionNone]; NSError * त्रुटि = शून्य; आईडी परिणाम = [विकोडक ऑब्जेक्ट के साथडेटा: डेटा त्रुटि: & amp; त्रुटि]; // इसके अलावा NSJSONSerialization // // आईडी परिणाम = के साथ परीक्षण [NSJSONSerialization JSONObjectWithData: डेटा // विकल्प: 0 // त्रुटि: & amp; त्रुटि]; यदि (! त्रुटि) NSLog (@ "% s: परिणाम =% @", __FUNCTION__, परिणाम); अन्य NSLog (@ "% s: त्रुटि =% @", __FUNCTION__, त्रुटि);    

No comments:

Post a Comment