Alamofire + SwiftyJSON没有收到JSON对象中的最后一项

时间:2016-04-06 01:42:42

标签: json swift alamofire swifty-json

从JSON对象的最后一项中提取数据时,我遇到了一个奇怪的问题。基本上,我有14个项目被退回,但当我尝试从最后一个项目中抓取一个元素时,它说我只有10个。这是我的代码:

Alamofire.request(.GET, "http://xyz.herokuapp.com/api/v1/purchases/", parameters: ["login_user": "admin@xyz.com", "login_password": "test123"])
        .responseJSON { response in
            switch response.result {
            case .Success(let data):
                let json = JSON(data)
                let dispenseToken = json["purchases"]["purchases".length-1]["dispense_token"]
                print(json["purchases"]["purchases".length])
            case .Failure(let error):
                print("Request failed with error: \(error)")
            }

Purchases JSON对象返回:

    purchases =     (
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 759316;
        dispensed = 1;
        id = 2;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 41277;
        dispensed = 1;
        id = 1;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 877725;
        dispensed = 1;
        id = 3;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 5379;
        dispensed = "<null>";
        id = 4;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 246309;
        dispensed = "<null>";
        id = 5;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 573469;
        dispensed = "<null>";
        id = 6;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 770184;
        dispensed = "<null>";
        id = 7;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 199976;
        dispensed = "<null>";
        id = 8;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 531909;
        dispensed = "<null>";
        id = 9;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 608240;
        dispensed = "<null>";
        id = 10;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 843961;
        dispensed = "<null>";
        id = 11;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 938967;
        dispensed = "<null>";
        id = 12;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 212041;
        dispensed = "<null>";
        id = 13;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    },
            {
        "credit_card_id" = "<null>";
        "dispense_token" = 204030;
        dispensed = "<null>";
        id = 14;
        "machine_id" = 1;
        "payment_type" = "<null>";
        reserved = "<null>";
        "user_id" = 1;
    }
);

但是当我打印json [“purchase”] [“purchase”.length]时,这就是我得到的结果:

{
  "reserved" : null,
  "machine_id" : 1,
  "id" : 10,
  "payment_type" : null,
  "dispense_token" : "608240",
  "user_id" : 1,
  "credit_card_id" : null,
  "dispensed" : null
}

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

"purchases".length不是您想要使用的。 "purchases".length表示字符串的length不是数组的最后一个元素...(“purchase”有9个字符,这就是你获得列表中第10个元素的原因。)

您想要使用.arrayValue.last。试试json["purchases"].arrayValue.last