2017-06-05 14 views
11

Tôi đang cố gắng để thực hiện một yêu cầu bài với các từ điển sau đó được chuyển thành JSONđiển để JSON được đăng hai lần trong 3 nhanh chóng

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

Tôi serialising này bằng cách sử dụng đoạn mã sau và sau đó thực hiện một http yêu cầu -POST sử dụng các tùy chọn sau:

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

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

tôi cũng đang chạy một json-server https://github.com/typicode/json-server với file db.json sau

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

Vấn đề tôi đang gặp là các mục mới được bổ sung trong db trông không đúng với định dạng sau:

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

Tôi không chắc chắn là tại sao nó được serialising toàn bộ từ điển như là chìa khóa và sau đó là một sản phẩm nào chuỗi là giá trị.

Cập nhật

Dưới đây là đoạn code mà bài viết này đến máy chủ:

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() 

Là một mặt lưu ý, tôi đã cố gắng gầy này qua người đưa thư và tất cả các công trình ok. Đính kèm ảnh chụp màn hình của nó bên dưới. enter image description here

Bất kỳ trợ giúp nào sẽ được đánh giá cao, Cảm ơn!

+0

@EricAya Cảm ơn bạn đã liên hệ rất nhanh! Tôi đã cập nhật các bài viết trên với một bản cập nhật gửi yêu cầu http cũng như giải thích rằng cùng một yêu cầu về postman hoạt động ok. –

+0

@EricAya Tôi đã thay đổi nó để tên khóa chính xác như nhau. Dường như làm việc tốt trên người đưa thư. Các vấn đề có nhiều khả năng liên quan đến yêu cầu HTTP hoặc serialization đang xảy ra. –

Trả lời

2

Khi bạn xây dựng URLRequest của mình, dòng này có sửa chữa nó cho bạn không?

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

Trong Postman bạn gửi nó như ứng dụng/json vì vậy tôi mong bạn cần phải làm như vậy trong mã nhanh của bạn.

+0

Hoàn hảo! không nhận thức được điều đó. Tôi tiếp tục xem xét phản hồi và kiểu phản hồi đã được đặt thành ứng dụng/json để nghĩ rằng yêu cầu bài đăng có cùng loại. Điều này giải quyết nó cho tôi! : tada: Thansk! –

Các vấn đề liên quan