【问题标题】:Converting Dictionary to Json to pass parameters in Alamofire将 Dictionary 转换为 Json 以在 Alamofire 中传递参数
【发布时间】:2017-11-18 19:15:42
【问题描述】:

我有一个字典,键为用户名,值为电子邮件。我想使用 Alamofire 将其发送到 api 我不知道如何解决这个问题,因为我想将多个用户发送到 api 以一次保存。

字典

var selectedMembers = [String: String]()

保存在此字典中的数据附加在与表格视图不同的 VC 中,我们可以在表格视图中选择要在字典中附加多少用户。 现在我需要将此字典转换为 json 格式以通过 alamofire 发送到 api。

Json 甲酸盐

"users": [
        {
          "user_email": "abc@gmail.com",
          "user_name": "abc"
        }, 
        {
          "user_email": "abc2@gmail.com",
          "user_name": "abc2"
        }   
   ]

Alamofire 代码

let parameters: Parameters = [
            "users" : [
               [
                "user_name" : "user_name goes here",
                "user_email" : "user_email goes here"
               ]
            ]
        ]

        Alamofire.request("\(baseURL)", method: .post, parameters: parameters).responseJSON { response in

        }

我是如何解决问题的

我创建了一个函数来打印我想要的数据并将其放置在 Alamofire 参数中,类似于这样。

var selectedMembers = [String: String]()
var smembers = [AnyObject]()
var selected = [String: String]()

if selectedMembers.isEmpty == false {
        for (key, value) in selectedMembers {
            selected = ["useremail": key, "catagory": value]
            smembers.append(selected as AnyObject)
        }
    }

let jsonData = try? JSONSerialization.data(withJSONObject: smembers, options: JSONSerialization.WritingOptions())
let jsonString = NSString(data: jsonData!, encoding: String.Encoding.utf8.rawValue)

let parameters: Parameters = [
            "users" : jsonString as AnyObject
        ]

        Alamofire.request("\(baseURL)", method: .post, parameters: parameters).responseJSON { response in

        }

【问题讨论】:

    标签: ios json dictionary swift3


    【解决方案1】:

    这是我的解决方案,用于使用 Alamofire 调用 POST 并将字典值数组作为参数 arg 传递。 请注意包含值字典的“用户”键。

        let dict: NSMutableDictionary = [:]
        dict["facebook_id"] = "1234559393"
        dict["name"] = "TestName"
        dict["email"] = "TestEmailID"
    
        let params: Parameters = [
            "user": dict
        ]
    
        Alamofire.request("YOURURL", method: .post, parameters: params, encoding: JSONEncoding.default).responseJSON(completionHandler: { (response) in
                                switch response.result {
                case .success:
                    print("succeeded in making a Facebook Sign up REST API. Now going to update user profile"
                    break
                case .failure(let error):
                    return
                        print(error)
                }
            })
    

    就在您向字典中添加项目的地方,您可以检查 nil 值并避免根据需要添加,从而使其动态化。

    【讨论】:

      【解决方案2】:

      如果您的 Web API 要求以 JSON 格式发送帖子数据,那么下面的书面方法就是一种方法。

      func calltheAPIToSendSelectedUser () {
          let parameters: [String: Any] = [
              "users" : [
                  [
                      {
                          "user_name" : "user1_name goes here",
                          "user_email" : "user1_email goes here"
                      },
                      {
                          "user_name" : "user2_name goes here",
                          "user_email" : "user2_email goes here"
                      },
                      {
                          "user_name" : "user3_name goes here",
                          "user_email" : "user3_email goes here"
                      },
                  ]
              ]
          ]
      
          var request = URLRequest(url: URL(string: "YourApiURL")!)
          request.httpMethod = "POST"
          request.httpBody = try! JSONSerialization.data(withJSONObject: parameters, options: [.prettyPrinted])
          Alamofire.request(request).responseJSON { response in
      
          }
      }
      

      【讨论】:

        【解决方案3】:

        您只需要将字典(用户)数组设置为当前您将user 的值设置为Dictionary 而不是Array

        let parameters: Parameters = [
            "users" : [
                [
                    "user_name" : "abc",
                    "user_email" : "abc@gmail.com"
                ],
                [
                    "user_name" : "abc2",
                    "user_email" : "abc2@gmail.com"
                ]
            ]
        ]
        Alamofire.request("\(baseURL)", method: .post, parameters: parameters).responseJSON { response in
        
        }
        

        【讨论】:

        • 是的,这是一个错误,但我的问题是如果字典中有 2 或 3 个用户,我如何更改字典中数据的参数数量
        • 好的,所以字典中的数据会改变。它来自一个列表,我可以选择在字典中附加任意数量的项目。
        • @AmanChawla 如果它仍然无法正常工作,请尝试在请求调用中添加encoding 参数,并使用JSONEncoding.default 值这样Alamofire.request("\(baseURL)", method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in }
        • 我已经添加了我想如何解决这个问题
        • @AmanChawla 你为什么要用emailcatagory 而不是user_emailuser_name 来制作字典,你也可以显示selectedMembers 字典的日志。
        猜你喜欢
        • 2015-05-05
        • 2021-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 2017-06-14
        相关资源
        最近更新 更多