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

Alamofire + SwiftyJSON not receiving last item in JSON object

从 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)")
            }

采购 JSON 对象 returns 这个:

    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["purchases"]["purchases".length] 时,这是我得到的结果:

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

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

"purchases".length 不是您要使用的。 "purchases".length 表示字符串的 length 不是数组的最后一个元素...("purchases" 有 9 个字符,这就是为什么你得到列表中的第 10 个元素。)

您想改用 .arrayValue.last。尝试 json["purchases"].arrayValue.last