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
从 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