我有以下代码的json数据:
{
"all": [
{
"ModelId": 1,
"name": "ghe",
"width": 2
},
{
"ModelId": 2,
"name": "ban",
"width": 3
}]
}
我尝试获取modelId
并将其转换为String,但它不能使用我的代码:
let data = NSData(contentsOf: URL(string: url)!)
do {
if let data = data, let json = try JSONSerialization.jsonObject(with: data as Data) as? [String: Any], let models = json["all"] as? [[String:Any]] {
for model in models {
if let name = model["ModelId"] as? String {
_modelList.append(name)
}
}
}
completion(_modelList)
}catch {
print("error")
completion(nil)
}
如何解决此问题?感谢。
答案 0 :(得分:0)
目前您正在寻找错误的密钥
for model in models {
if let name = model["ModelId"] as? NSNumber {
_modelList.append(name.stringValue)
}
}
答案 1 :(得分:0)
我认为ModelId
是整数类型。那么,你可以尝试将它转换为Integer
for model in models {
if let name = model["ModelId"] as? Int{
_modelList.append("\(name)")
}
}
希望,它会对你有所帮助。
答案 2 :(得分:0)
if let as?
是打开包装,而不是打字。所以你首先解开,然后你把它转换成字符串。
for model in models {
if let name = model["ModelId"] as? Int {
_modelList.append("\(name)")
}
}
答案 3 :(得分:0)
只要你使用JSONSerialization.jsonObject
解析你的JSON,你几乎无法控制反序列化器将创建的类型,你基本上让解析器决定。这是明智的,它会从没有引号的数字创建“NSNumber
类型的某种”Int
。这不能转换为String
,因此您的程序将失败。
你可以做不同的事情以“解决”这个问题,我想建议用于JSON解析的Codable
协议,但是这个特定的问题可能只能使用看起来很亲切的自定义初始化程序来解决在this question中可以看到详细的。
如果您只想将转换您的NSNumber
ModelId
转换为String
,则必须创建一个新对象(而不是徒劳无功) )。在您的上下文中,这可能只是
if let name = String(model["ModelId"]) { ...
这仍然不是一个优雅的解决方案,但它可以解决手头的问题。