2016-08-21 9 views
5

サイトにJSONデータを送信しようとするとエラーが発生します。しかし、サイトをチェックすると、jsonのすべてのデータが送信され、正しいことがわかります。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(jsonData, options: NSJSONReadingOptions.AllowFragments) 

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

をし、私はもはやエラーが発生します。

答えて

1

データがサーバーに正常に送信された後に結果を印刷すると、エラーが発生します。

NSJSONSerialization.JSONObjectWithDataでは、オブジェクト({})または配列([])で開始する必要があります。このよう.AllowFragmentsオプションを追加

試してみてください。それが動作しない場合は

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

、バックサーバーからのデータが不正JSONです。 responsestatusCodeを印刷して、問題がないかどうか確認してください。

サーバーを制御する場合、返される内容を確認する必要があります。

+0

私は別のエラーが発生した場合: – dozo

+0

私の経験では、この問題は、サーバーからの応答がJSONオブジェクトまたは配列でない場合に発生します。応答を配列で囲むようにしてください。 –

+0

これはサーバー上で実行する必要があります。データの生成方法(PHP、.NET、JS、...)は分かりませんが、 '[]'や '{}'を追加する必要があります。 –