Swift中JSON的字典数组

时间:2017-01-26 21:31:17

标签: json swift dictionary serialization alamofire

我试图将一组字典作为Alamofire请求的参数之一发送。但是,Alamofire在请求时失败了。

class PromoCategory {
    var promoCategoryId   : Int?
    var activityId        : Int?
    var promoCategoryName : String?
    var activityName      : String!
    var statusCd          : Int?

    init() {
        promoCategoryId   = 0
        promoCategoryName = ""
    }

    func getDictFormat() -> [String: Any] {
        if activityId == nil { activityId = 0 }
        if statusCd   == nil { statusCd = 0 }

        return [
            "promoCategoryId"   : "\(promoCategoryId!)",
            "activityId"        : "\(activityId!)",
            "promoCategoryName" : promoCategoryName!,
            "activityName"      : activityName!,
            "statusCd"          : "\(statusCd!)"
        ]
    }
}


var promoCat = [[String: Any]]()

for cat in promoCategories {
    let element = cat.getDictFormat()
    promoCat.append(element)
}

var params : [String : Any] = [:]
params["person_id"]         = kPersonId
params["person_promo_id"]   = promo.personPromoId
params["promo_page_id"]     = promo.promoPageId
params["seq_no"]            = promo.seqNo
params["promo_type"]        = promoTypeString
params["page_name"]         = promo.pageName
params["image_name"]        = promo.imageName
params["start_date"]        = promo.startDate
params["end_date"]          = promo.endDate
params["website"]           = promo.website
...
params["promoCategories"]   = promoCat


Alamofire.request(promoUrl!, method: .post, parameters: params, encoding: JSONEncoding.default, headers: nil)
    .validate()
    .responseJSON { response in
        switch response.result {
        case .success(let data):
            self.json = JSON(data)
            print(self.json as Any)

            DispatchQueue.main.async(execute: { () -> Void in
                self.dismiss(animated: true, completion: nil)
                HUD.hide()
                })
        case .failure(let error):
            self.logApiError(url: (...)
        }
    }

错误:

  

请求失败并显示错误:   responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(错误   Domain = NSCocoaErrorDomain Code = 3840"字符周围的值无效   0" UserInfo = {NSDebugDescription =字符0周围的值无效。}))

如果我删除了promoCategories参数,那么它可以正常工作。 params对象最终看起来像这样:

{
    address = "";
    bgColorBlue = "0.28936631944444";
    bgColorGreen = "0.3072916666666701";
    bgColorRed = "0.3063227289789799";
    city = "";
    "contact_name" = "John Smith";
    "contact_phone" = 3065554611;
    "country_cd" = CA;
    "end_date" = "2017-01-26 21:06:08Z";
    "facility_name" = "Conexus Arts Centre";
    "image_name" = "EV1.20170126210608302479028.jpg";
    latitude = 0;
    longitude = 0;
    "page_name" = "Test Promo";
    "person_id" = 1;
    "person_promo_id" = 21;
    promoCategories =     (
                {
            activityId = 68;
            activityName = "Fashion & Beauty";
            promoCategoryId = 271;
            promoCategoryName = Accessories;
            statusCd = 0;
        },
                {
            activityId = 68;
            activityName = "Fashion & Beauty";
            promoCategoryId = 273;
            promoCategoryName = Beauty;
            statusCd = 0;
        },
                {
            activityId = 68;
            activityName = "Fashion & Beauty";
            promoCategoryId = 270;
            promoCategoryName = Fashion;
            statusCd = 0;
        }
    );
    "promo_page_id" = 0;
    "promo_type" = event;
    "prov_state_cd" = "";
    "seq_no" = 0;
    "start_date" = "2017-01-26 21:06:08Z";
    website = "";
}

这是我应该使用的方法吗?有没有我错过的东西?感谢。

0 个答案:

没有答案