I'm new in Swift and I have a problem with filtering NULL values from JSON file and setting it into Dictionary. I getting JSON response from the server with null values and it crashes my app.
Here is JSON response:
"FirstName": "Anvar",
"LastName": "Azizov",
"Website": null,
"About": null,
I will be very appreciated for help to deal with it.
UPD1: At this moment I decided to do it in a next way:
if let jsonResult = responseObject as? [String: AnyObject] {
var jsonCleanDictionary = [String: AnyObject]()
for (key, value) in enumerate(jsonResult) {
if !(value.1 is NSNull) {
jsonCleanDictionary[value.0] = value.1
}
}
}
Use compactMapValues
:
dictionary.compactMapValues { $0 }
compactMapValues
has been introduced in Swift 5. For more info see Swift proposal SE-0218.
let json = [
"FirstName": "Anvar",
"LastName": "Azizov",
"Website": nil,
"About": nil,
]
let result = json.compactMapValues { $0 }
print(result) // ["FirstName": "Anvar", "LastName": "Azizov"]
let jsonText = """
{
"FirstName": "Anvar",
"LastName": "Azizov",
"Website": null,
"About": null
}
"""
let data = jsonText.data(using: .utf8)!
let json = try? JSONSerialization.jsonObject(with: data, options: [])
if let json = json as? [String: Any?] {
let result = json.compactMapValues { $0 }
print(result) // ["FirstName": "Anvar", "LastName": "Azizov"]
}
I would do it by combining filter
with mapValues
:
dictionary.filter { $0.value != nil }.mapValues { $0! }
Use the above examples just replace let result
with
let result = json.filter { $0.value != nil }.mapValues { $0! }