2016-06-26 8 views
0

PUSH HTTPリクエストを試行していて、JSON配列ではなくJSONObjectを指定する必要があることを説明するエラーが発生しました。単一オブジェクトからArrayを作成するにはどうすればいいですかそう?JSONObjectとJSONArray Swift

func printdata(){ 
    let myJsonDict: [String:AnyObject] = [ 
      "action": "Websites", 
      "method":"school_webpage", 
      "tid":2, 
      "data":["schoolId":14273], 
      "type":"rpc" 
     ] 
    do{ 
     let jsonObject = try NSJSONSerialization.dataWithJSONObject(myJsonDict, options: NSJSONWritingOptions.PrettyPrinted) 
      HTTPPostJSON("http://wwww.oncoursesystems.com/json.axd/direct/router", data:jsonObject) { (response, error) -> Void in 
       print(response); 
      } 
     } 
     catch{ 

     } 
} 

func HTTPsendRequest(request: NSMutableURLRequest, callback: (String, String?) -> Void) { 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     (data, response, error) -> Void in 
      if (error != nil) { 
       callback("", error!.localizedDescription) 
      } else { 
       callback(NSString(data: data!, encoding: NSUTF8StringEncoding)! as String, nil) 
      } 
    } 

    task.resume() 
} 

func HTTPPostJSON(url: String, data: NSData, callback: (String, String?) -> Void) { 

    let request = NSMutableURLRequest(URL: NSURL(string: url)!) 

    request.HTTPMethod = "POST" 
    request.addValue("application/json",forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json",forHTTPHeaderField: "Accept") 
    request.HTTPBody = data 
    HTTPsendRequest(request, callback: callback) 
} 

私のメソッド呼び出し

override func viewDidLoad() { 
    super.viewDidLoad() 
    searchController.searchResultsUpdater = self 
    searchController.hidesNavigationBarDuringPresentation = false 
    searchController.dimsBackgroundDuringPresentation = false 
    searchController.searchBar.sizeToFit() 
    definesPresentationContext = true 
    self.tableView.tableHeaderView = searchController.searchBar 
    names = HtmlController.loadData() as NSArray as! [String] 
    names.removeAtIndex(0) 
    clean() 
    refreshController = UIRefreshControl() 
    refreshController.addTarget(self, action: #selector(WebpageController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged) 

    self.tableView.addSubview(refreshController) 
    printdata() 

    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 
} 
+0

これは私のPOSTの本体に文字列を使用しているので、私はこれに対する答えに興味があります。それは私のために働いていたので、私は何か他のことをしていませんでしたが、私は将来のコードをきれいにすることに気をつけません。 – Sethmr

+0

'JSONオブジェクトではなくJSON配列を提供する必要があります.'ここではいくつかのボキャブラリーの混乱があります.JSONオブジェクトは常に辞書または配列です。 :) – Moritz

答えて

0

あなたはPOSTリクエストを意味していますか?

は、これが私の作品:

func HTTPPostJSON(url: String, data: AnyObject, callback: (String, String?) -> Void) { 
    let request = NSMutableURLRequest(URL: NSURL(string: url)!) 
    request.HTTPMethod = "POST" 
    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept")  
    request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(data, options: []) 
    HTTPsendRequest(request, callback: callback) 
} 

注メソッドのシグネチャ、[「文字列」:ANYOBJECT]としてデータを渡し、HTTPPostJSONメソッド内シリアライズを扱います。私は何が間違っているの形式のjson(かなりのオプションを使用して)を渡すことに関連するかもしれないと思う。

編集:あなたのコメントに基づいて

は、新しいメソッドシグネチャに対応するために、あなたの印刷方法を更新しましたか?

func printdata(){ 
    let myJsonDict: [String:AnyObject] = [ 
     "action": "Websites", 
     "method":"school_webpage", 
     "tid":2, 
     "data":["schoolId":14273], 
     "type":"rpc"] 

    HTTPPostJSON("http://wwww.oncoursesystems.com/json.axd/direct/router", data:myJsonDict) { 
    (response, error) -> Void in 
     print(response); 
    } 
} 
+0

HTTPPostJSONメソッドは、上記の方法のコンテキストで動作していますか?私はあなたのメソッドを使用するとき、私はまだ同じエラーを受け取ります – Praveen

+0

あなたはどのようにメソッドを呼び出すのですか? –

+0

私はそれをビューで呼びましたかロードしましたか?私の編集後の投稿を参照してください – Praveen

関連する問題