快速使用Alamofire将参数作为原始数据发送

时间:2020-05-20 03:51:37

标签: json swift alamofire raw-data

在快速使用alamofire时,我有以下原始数据作为参数发送

{
    "customer": {
        "firstname": "test",
        "lastname": "user",
        "email": "testuser30@gmail.com",
        "website_id": 1,
        "addresses": [
        {
            "customer_id": 3292,
            "region": {
                "region": "New York"
            },
            "country_id": "US",
            "street": [
                "US"
            ],
            "telephone": "84656313",
            "postcode": "34521",
            "city": "us",
            "firstname": "test",
            "lastname": "usr",
            "default_shipping": true,
            "default_billing": true
        }
    ]

    }

}

我已经使用alamofire在代码中编写了以下参数。

  let customer : Parameters = [
                    "email":email,
                    "firstname":fname,
                    "lastname":lname,
                    "website_id":1,
                    "addresses": {
                        [
                            "customer_id": id,
                            "region": [
                                "region": state
                            ],
                            "country_id": country,
                            "street": {
                                self.add1Txt.text! + self.add2Txt.text!
                            },
                            "telephone": self.phoneTxt.text!,
                            "postcode": self.pincodeTxt.text!,
                            "city": self.cityTxt.text!,
                            "firstname": self.fnameLbl.text!,
                            "lastname": self.lnameLbl.text!,
                            "default_shipping": true,
                            "default_billing": true
                        ]
                    }
                 ]

                let parameters: Parameters =
                               [
                                    "customer": customer

                               ]

它显示“ JSON写入(__SwiftValue)中的无效类型”。此参数传递有什么问题?

2 个答案:

答案 0 :(得分:0)

您的客户变量不是正确的字典。 "addresses": {实际上是字典的数组。它应类似于以下代码。除此之外,如果您使用Codable创建模型结构并借助JSONEncoder和JSONSerialization转换为字典,则可以避免此类问题。您可以看到此thread

 let parameters: Parameters = ["customer": [
            "addresses" : [[

                            "city": "us",
                            "country_id" :"US",
                            "customer_id" :"3292",
                            "default_billing" : 1,
                            "default_shipping" : 1,
                            "firstname" :"test",
                            "lastname" :"usr",
                            "postcode" :34521,
                            "region" : ["region" : "New York"],
                            "street" : ["US"],
                            "telephone" : 84656313

            ]],
            "email" : "testuser30@gmail.com",
            "firstname": "test",
            "lastname": "user",
            "website_id" : 1
        ]]

答案 1 :(得分:0)

使用Quicktype从您的json立即生成结构:

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div class="container-fluid" id="app">
      <div class="d-flex align-items-center navbar-left">
        <button type="button"
                @click="openOverlay"
                class="navbar-toggler navbar-icon"
                data-toggle="collapse" />
        
      </div>
      <div id="myNav" class="overlay">
        <a href="javascript:void(0)"
           class="closebtn" @click="closeOverlay">&times;</a>
        <div class="overlay-content">
         
        </div>
      </div>
    </div>
相关问题