ios - 无法快速从 JSON 中正确提取数据
问题描述
在将 json 字符串解析为对象后,我的响应中有一个这种 json 对象
[
"requestId": 1,
"response": {
code = SUCCESS;
},
"messageId": ACTION_COMPLETE
]
我正在尝试requestId
使用
responseMsg["requestId"] as! Int
我收到此错误
无法将“NSTaggedPointerString”(0x21877a910)类型的值转换为“NSNumber”(0x218788588)。
我尝试将其更改为Int(responseMsg["requestId"] as! String)!
This thing is working for positive numbers but not for negative numbers may be bcz when requestId = -2
it throws me an error
无法将“__NSCFNumber”(0x21877a000)类型的值转换为“NSString”(0x218788290)。
我也尝试了不同的其他解决方案,但没有奏效。
解决方案
对于解析JSON 数据,最好使用它Codable
而不是手动解析所有内容。
对于JSON 格式,
{
"requestId": 1,
"response": {
"code":"SUCCESS"
},
"messageId": "ACTION_COMPLETE"
}
创建模型,例如,
struct Root: Decodable {
let requestId: String?
let messageId: String
let response: Response
enum CodingKeys: String, CodingKey {
case requestId, messageId, response
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
if let id = try? values.decode(Int.self, forKey: .requestId) {
requestId = String(id)
} else if let id = try? values.decode(String.self, forKey: .requestId) {
requestId = id
} else {
requestId = nil
}
messageId = try values.decode(String.self, forKey: .messageId)
response = try values.decode(Response.self, forKey: .response)
}
}
现在,使用解析JSON 数据,
do {
let root = try JSONDecoder().decode(Root.self, from: data)
print(root.requestId) //access requestId like this....
} catch {
print(error)
}
推荐阅读
- mysql - 同表更新和选择操作
- .net-core - NuGet:更新 appsettings.json,添加 readme.txt
- django - 用于 Django 的 MongoDB 连接器
- arrays - 如何将数组数组更改为哈希图?
- c - 在 C 中分配指针时的显式转换
- php - 如何在 Wordpress REST API 中创建新的 rest url 前缀?
- c# - 接收点击导航栏中某项的页面
- regex - 正则表达式:查找不包含单词的标签并将该单词插入到 REPLACE
- python-3.x - 如何初始化 Python 数据类 2D 列表?
- tcl - 使用 tcl 脚本获取最新版本