2016-08-21 9 views
5

पोस्ट करते समय JSON त्रुटि किसी साइट पर JSON डेटा भेजने का प्रयास करते समय मुझे एक त्रुटि मिलती है। लेकिन जब मैं साइट की जांच करता हूं, तो मुझे लगता है कि जेसन में सभी डेटा भेजा गया था और सही है।जेएसओएन

त्रुटि मैं मिलता है:

Error: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.} 

कोड रहा है:

let json = [ 
      "name": "john", 
      "last name": "smith" 
     ] 

     do{ 

      let jsonData = try NSJSONSerialization.dataWithJSONObject(json, options: .PrettyPrinted) 


      let url = NSURL(string: website) 

      let request = NSMutableURLRequest(URL: url!) 

      request.HTTPMethod = "POST" 

      request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") 
      request.HTTPBody = jsonData 

      let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in 

       if error != nil{ 
        print("Error: \(error)") 
        return 
       } 

       do { 
        let result = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject] 

        print("Result: \(result)") 

       } catch { 
        print("Error: \(error)") 
       } 
      } 

      task.resume() 

     } catch { 
      print(error) 
     } 

जब मैं टुकड़े के लिए अनुमति देते हैं:

try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) 

मैं एक त्रुटि मिलती है:

Error: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.} 

मैं बदल दिया है:

try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) 

try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments) 

करने के लिए और मैं अब कोई त्रुटि मिलती है।

उत्तर

1

त्रुटि तब होती है जब डेटा सफलतापूर्वक सर्वर पर भेजे जाने के बाद आप अपना परिणाम प्रिंट करते हैं।

NSJSONSerialization.JSONObjectWithData को JSON को किसी ऑब्जेक्ट ({}) या एक सरणी ([]) से शुरू करने की आवश्यकता है।

इस तरह .AllowFragments विकल्प जोड़ने का प्रयास करें:

let result = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? [String:AnyObject] 

यह काम नहीं करता है, तो डेटा सर्वर से वापस आ रहा अमान्य JSON है। आपको response के statusCode को प्रिंट करने का प्रयास करना चाहिए और देखें कि कोई समस्या है या नहीं।

यदि आप सर्वर को नियंत्रित करते हैं, तो आपको यह देखना चाहिए कि क्या भेजा गया है।

+0

जब मैं कोशिश करता हूं कि मुझे एक और त्रुटि मिलती है: – dozo

+0

मेरे अनुभव में, यह समस्या तब होती है जब सर्वर से प्रतिक्रिया JSON ऑब्जेक्ट या सरणी नहीं होती है। बस एक सरणी में प्रतिक्रिया लपेटने की कोशिश करें। –

+0

यह सर्वर पर किया जाना है। मुझे नहीं पता कि डेटा कैसे उत्पन्न होता है (PHP, .NET, JS, ...) लेकिन आपको इसके आसपास '[]' या '{}' जोड़ना होगा। –