Как отправить данные JSON с объектом JSON в Swift 4 - PullRequest
0 голосов
/ 25 октября 2018

Мне нужно отправить json на сервер в следующем порядке

data:{"firstname":"Alpha","lastname":"Beta"}

enter image description here

В этом ключ данных находится вне json, как [data:json]но когда я сериализуюсь, он делает запрос как

{
  "data" : {
    "firstname" : "alpha",
    "lastname" : "beta"
  }
}

Это мои модели:

struct UserDetail :Codable {
    let data :CreateProfileModel
}

struct CreateProfileModel :Codable {
    let firstname :String
     let lastname :String
}

Данные, которые я добавляю в эти модели

let profileInfo = CreateProfileModel(firstname: "alpha" , lastname: "beta")

let userDetails = UserDetail(data: profileInfo)

Этоэто кодировка json, которую я использую с помощью swift:

 let jsonEncoder = JSONEncoder()
 jsonEncoder.outputFormatting = .prettyPrinted
 do{
    let userData = try jsonEncoder.encode(userDetails)
     print(String(data: userData, encoding: .utf8)!)
     networkListener.requestPost(endpoint: endpoint, data: userData , headerValue: nil)
   }catch{
    print(error)
   }

В методе requestPost

  func requestPost(endpoint : String , data :Data,headerValue : String?){....
  request.httpbody = data
}

Я добавляю эти данные request.httpbody.

Как можнодобавить ключ данных с profileInfo?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Попробуйте этот код:

var columnValus:[String:Any]  = [:]

columnValus["firstname"] = userDetails.data.firstname
columnValus["lastname"] = userDetails.data.lastname

let userData = [
      "data": columnValus
      ] as [String : Any]

  do {
      let postData = try JSONSerialization.data(withJSONObject: userData, options: [])
      networkListener.requestPost(endpoint: endpoint, data: postData , headerValue: nil)
  }catch let error as NSError {
      print(error)
  }
0 голосов
/ 25 октября 2018

Если API требует (эффективно) данных формы HTML, вам нужно создать тело самостоятельно и извлечь биты JSON.

Попробуйте:

let userData = try jsonEncoder.encode(userDetails.data)
let postBodyString = "data:\(userData)"
let postBodyData = postBodyString.data(using: String.Encoding.utf8)
networkListener.requestPost(endpoint: endpoint, data: postBodyData, headerValue: nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...