删除 json 响应 swift 中的空值
remove null values in json response swift
我收到这个错误:
Could not cast value of type 'NSNull' (0x1114e4850) to 'NSString' (0x11065d2a8).
//These are my arrays
var snoArray:[Int] = []
var quote_idArray:[String] = []
var quote_amountArray:[String] = []
var dateArray:[String] = []
var timeArray:[String] = []
var perkilometerArray:[String] = []
var pertonArray:[String] = []
//My JSON response is like this.
["Response": {
Array = (
{
date = "25-05-2018";
perkilometer = 2;
perton = "<null>";
"quote_amount" = 1234;
"quote_id" = 5b080f8aa082c;
sno = 1;
time = "18:58";
},
{
date = "25-05-2018";
perkilometer = 346;
perton = "<null>";
"quote_amount" = 230000;
"quote_id" = 5b080ed57aa34;
sno = 2;
time = "18:55";
}
);
"error_code" = 0;
message = SUCCESS;
status = SUCCESS;
}, "count": 2]
//I'm catching response like this...
if status == "SUCCESS" {
if let array = res!["Array"] as? Array<Dictionary<String, Any>> {
// print(array.count)
self.snoArray = array.map { [=12=]["sno"]! } as! [Int]
self.quote_idArray = array.map { [=12=]["quote_id"]! } as! [String]
self.quote_amountArray = array.map { [=12=]["quote_amount"]! } as! [String]
self.dateArray = array.map { [=12=]["date"]! } as! [String]
self.timeArray = array.map { [=12=]["time"]! } as! [String]
self.perkilometerArray = array.map { [=12=]["perkilometer"]! } as! [String]
//But here I'm getting null values and app crashed
self.pertonArray = array.map { [=12=]["perton"]! } as! [String]
}
}
//When I write like this, it's printing : [<null>, <null>]
let perTon = array.compactMap({ [=12=] ["perton"]})
print(perTon) // Output: [<null>, <null>]
我提到了这个 link : https://useyourloaf.com/blog/swift-non-nil-values-in-an-array-of-optionals/
我想从 self.pertonArray 中删除空值并打印空值 self.pertonArray([ , ]).
如果假设我收到这样的回复如何解决这个问题。
["Response": {
Array = (
{
date = "25-05-2018";
perkilometer = 2;
perton = "something";
"quote_amount" = 1234;
"quote_id" = 5b080f8aa082c;
sno = 1;
time = "18:58";
},
{
date = "25-05-2018";
perkilometer = 346;
perton = "<null>";
"quote_amount" = 230000;
"quote_id" = 5b080ed57aa34;
sno = 2;
time = "18:55";
}
);
"error_code" = 0;
message = SUCCESS;
status = SUCCESS;
}, "count": 2]
如何解决这个问题....
有很多方法可以在绑定时从 JSON 中删除 nil。
但这里有一个根据你的代码。
if status == "SUCCESS" {
if let array = res!["Array"] as? Array<Dictionary<String, Any>> {
// print(array.count)
self.snoArray = array.map { ([=10=]["sno"] as? Int) ?? 0 }
self.quote_idArray = array.map { ([=10=]["quote_id"] as? String) ?? "" }
self.quote_amountArray = array.map { ([=10=]["quote_amount"] as? String) ?? "" }
self.dateArray = array.map { ([=10=]["date"] as? String) ?? "" }
self.timeArray = array.map { ([=10=]["time"] as? String) ?? ""}
self.perkilometerArray = array.map { ([=10=]["perkilometer"] as? String) ?? "" }
// You get error here with null values
// here is how it's fixed
self.pertonArray = array.map { ([=10=]["perton"] as? String) ?? "" }
}
}
在绑定 json 时最好不要使用 Force Unwrapping
,因为您永远无法确定不会有空数据或不正确的数据(您期望 Int 但值是 String 发送自服务器).
使用字符串插值解析值
喜欢你的回复
你想得到perton
let value = ((responce as! Array)[indexofarray] as! Dictionary<string,any>)["perton"]
let perton = "\(value ?? "")"
对于第一个索引,这将 return something
,对于第二个索引,它将 return <null>
in string
我收到这个错误:
Could not cast value of type 'NSNull' (0x1114e4850) to 'NSString' (0x11065d2a8).
//These are my arrays
var snoArray:[Int] = []
var quote_idArray:[String] = []
var quote_amountArray:[String] = []
var dateArray:[String] = []
var timeArray:[String] = []
var perkilometerArray:[String] = []
var pertonArray:[String] = []
//My JSON response is like this.
["Response": {
Array = (
{
date = "25-05-2018";
perkilometer = 2;
perton = "<null>";
"quote_amount" = 1234;
"quote_id" = 5b080f8aa082c;
sno = 1;
time = "18:58";
},
{
date = "25-05-2018";
perkilometer = 346;
perton = "<null>";
"quote_amount" = 230000;
"quote_id" = 5b080ed57aa34;
sno = 2;
time = "18:55";
}
);
"error_code" = 0;
message = SUCCESS;
status = SUCCESS;
}, "count": 2]
//I'm catching response like this...
if status == "SUCCESS" {
if let array = res!["Array"] as? Array<Dictionary<String, Any>> {
// print(array.count)
self.snoArray = array.map { [=12=]["sno"]! } as! [Int]
self.quote_idArray = array.map { [=12=]["quote_id"]! } as! [String]
self.quote_amountArray = array.map { [=12=]["quote_amount"]! } as! [String]
self.dateArray = array.map { [=12=]["date"]! } as! [String]
self.timeArray = array.map { [=12=]["time"]! } as! [String]
self.perkilometerArray = array.map { [=12=]["perkilometer"]! } as! [String]
//But here I'm getting null values and app crashed
self.pertonArray = array.map { [=12=]["perton"]! } as! [String]
}
}
//When I write like this, it's printing : [<null>, <null>]
let perTon = array.compactMap({ [=12=] ["perton"]})
print(perTon) // Output: [<null>, <null>]
我提到了这个 link : https://useyourloaf.com/blog/swift-non-nil-values-in-an-array-of-optionals/
我想从 self.pertonArray 中删除空值并打印空值 self.pertonArray([ , ]).
如果假设我收到这样的回复如何解决这个问题。
["Response": {
Array = (
{
date = "25-05-2018";
perkilometer = 2;
perton = "something";
"quote_amount" = 1234;
"quote_id" = 5b080f8aa082c;
sno = 1;
time = "18:58";
},
{
date = "25-05-2018";
perkilometer = 346;
perton = "<null>";
"quote_amount" = 230000;
"quote_id" = 5b080ed57aa34;
sno = 2;
time = "18:55";
}
);
"error_code" = 0;
message = SUCCESS;
status = SUCCESS;
}, "count": 2]
如何解决这个问题....
有很多方法可以在绑定时从 JSON 中删除 nil。 但这里有一个根据你的代码。
if status == "SUCCESS" {
if let array = res!["Array"] as? Array<Dictionary<String, Any>> {
// print(array.count)
self.snoArray = array.map { ([=10=]["sno"] as? Int) ?? 0 }
self.quote_idArray = array.map { ([=10=]["quote_id"] as? String) ?? "" }
self.quote_amountArray = array.map { ([=10=]["quote_amount"] as? String) ?? "" }
self.dateArray = array.map { ([=10=]["date"] as? String) ?? "" }
self.timeArray = array.map { ([=10=]["time"] as? String) ?? ""}
self.perkilometerArray = array.map { ([=10=]["perkilometer"] as? String) ?? "" }
// You get error here with null values
// here is how it's fixed
self.pertonArray = array.map { ([=10=]["perton"] as? String) ?? "" }
}
}
在绑定 json 时最好不要使用 Force Unwrapping
,因为您永远无法确定不会有空数据或不正确的数据(您期望 Int 但值是 String 发送自服务器).
使用字符串插值解析值
喜欢你的回复
你想得到perton
let value = ((responce as! Array)[indexofarray] as! Dictionary<string,any>)["perton"]
let perton = "\(value ?? "")"
对于第一个索引,这将 return something
,对于第二个索引,它将 return <null>
in string