2017-06-05 346 views
11

我試圖與下面的詞典將其轉化爲JSON字典以JSON正在迅速3

let store = [ 
     "newTask" : [ 
      "project_name": "iOS", 
      "total_time":0, 
      "color":"blue" 
     ] 
    ] 

我連載這個使用下面的代碼,然後產生一個HTTP POST請求兩次連載使用下列選項-POST要求:

 let jsonData = try? JSONSerialization.data(withJSONObject: store) 

     var request = URLRequest(url: URL(string: "http://localhost:3000/store")!) 
     request.httpMethod = "POST" 
     request.httpBody = jsonData 

我也運行一個JSON服務器https://github.com/typicode/json-server具有以下db.json文件

{ 
"store": [ 
    { 
    "id": 0, 
    "ios": { 
     "project_name": "iOS", 
     "total_time": 0, 
     "color": "blue" 
    } 
    }, 
    { 
    "id": 1, 
    "elm": { 
     "project_name": "elm", 
     "total_time": 0, 
     "color": "blue" 
    } 
    } 
] 
} 

我遇到的問題是,在數據庫中最新添加的項目看起來不正確,格式如下:

{ 
    "{\"newTask\":{\"project_name\":\"iOS\",\"total_time\":0,\"color\":\"blue\"}}": "", 
    "id": 10 
}, 

我不清楚,爲什麼它是連載整個字典的鍵,然後空字符串作爲值。

更新

下面是這個職位的服務器代碼:

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
       guard let data = data, error == nil else {             // check for fundamental networking error 
        print("error=\(error)") 
        return 
       } 

       if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {   // check for http errors 
        print("statusCode should be 200, but is \(httpStatus.statusCode)") 
        print("response = \(response)") 
       } 

       do { 
        if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] { 
         print(json) 



        } 

       } catch let error { 
        print(error.localizedDescription) 
       } 

      } 
      task.resume() 

作爲一個方面說明,我試圖通過郵遞員束縛這一點,這一切工作OK。附上下面的截圖。 enter image description here

任何幫助將不勝感激,謝謝!

+0

@EricAya感謝您的聯繫,以便迅速獲得!我已經更新了上述職位有更新發布的HTTP請求,以及解釋說,在郵遞員同一請求工作正常。 –

+0

@EricAya使鍵名稱是完全一樣的,我改變了它。它似乎對郵差工作正常。問題很可能與HTTP請求或正在發生的序列化有關。 –

回答

2

當你構建你的URLRequest會這條線爲您解決問題?

request.setValue("application/json", forHTTPHeaderField: "Content-Type") 

在郵遞員您發送它作爲應用程序/ JSON所以我希望你需要做同樣的在你的SWIFT代碼。

+0

完美!沒有意識到這一點。我一直在尋找的響應和響應類型設置爲應用程序/ JSON這樣認爲POST請求是相同類型的。這爲我解決了! :田田:Thansk! –