【问题标题】:Swift get value body from Post Json methodSwift 从 Post Json 方法获取值主体
【发布时间】:2020-10-14 12:26:03
【问题描述】:

我尝试使用 alamofire 发布 Json,我可以,但我需要一个从成功的 API 发布的结果中获得的值。如何快速从 post 方法 JSON 中获取价值?我使用 Alamofire 让事情变得简单。

{
   "phoneNum": "+1234566869",
   "phoneNumTarget": "+2345687960",
   "id": "79999000"
  }

所以这是我的 Post JSON 的主体参数,

这是成功发布 JSON 的结果

{
    "data": {
    "orderId": "79999000",
"uniquesRoomId": 12341414,
"users": [
  {
    "avatar_url": "https:// some web",
    "phone_number": "085858490282",
    "fullname": "BuzzLightyear"
  },
  {
    "avatar_url": "https:// some web",
    "phone_number": "085858490282",
    "fullname": "General Zurg"
  }
],
"chat_name": "user2"
 },
  "message": "room has been successfully created",
  "success": true
  }

现在我想检索从那个 post Json 方法获得的所有值,我该怎么做?我是否需要先创建一个结构,就像我想为 JSON 发出 get 方法请求一样?

*更新问题

let data : [DataClass] = [ ] 

           AF.request(web, method: .post, parameters: chataja,encoder: 
      JSONParameterEncoder.default).responseJSON { (response) in
           switch (response.result) {
            case.success :
           self.data = response
            
            break

我尝试了这个,但它得到了一些错误

【问题讨论】:

  • 是的..你需要这样做

标签: json swift post alamofire


【解决方案1】:

你需要通过 Decodable 确认的结构来解析这个响应

import Foundation

// MARK: - User
struct User: Codable {
    let data: DataClass
    let message: String
    let success: Bool
}

// MARK: - DataClass
struct DataClass: Codable {
    let orderID: String
    let uniquesRoomID: Int
    let users: [UserElement]
    let chatName: String

    enum CodingKeys: String, CodingKey {
        case orderID = "orderId"
        case uniquesRoomID = "uniquesRoomId"
        case users
        case chatName = "chat_name"
    }
}

// MARK: - UserElement
struct UserElement: Codable {
    let avatarURL: String
    let phoneNumber, fullname: String

    enum CodingKeys: String, CodingKey {
        case avatarURL = "avatar_url"
        case phoneNumber = "phone_number"
        case fullname
    }
}


AF.request(web, method: .post, parameters: chataja,encoder: 
      JSONParameterEncoder.default).responseJSON { (response) in
           switch (response.result) {
            case .success(let data) :
            let user = try? JSONDecoder().decode(User.self, from: data)

【讨论】:

  • 啊,好吧,现在我只需要创建一个空数组,然后从该数组中调用它?哦,为什么要对 DataClass 和 UserElement 进行枚举?为什么不为所有结构创建枚举?
  • 所以如果我想获取 orderID,我必须这样做(我更新了我的问题)
  • let user = try? JSONDecoder().decode(User.self, from: jsonData)
  • 但我认为这是get方法,我使用post方法.....
  • 你想解码那个 json ... 使用 jsonDecoder
猜你喜欢
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 2019-09-15
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
相关资源
最近更新 更多