ios - Swift - “预计解码数组而是找到了一本字典。”
问题描述
我在尝试JSON
使用 Swift 4.2 解码时遇到了很多麻烦:
{
token = a3253e6ade9b5c7fd99673938bb28b3e;
user = {
"about_me" = Admin;
address = "";
"banner_path" = "http://members.sharjahcd.ae/images/000/000/008/1540737652129.jpg?1541043871";
company = "<null>";
description = "<null>";
email = "admin@stf.com";
"events_count" = 0;
"followers_count" = 0;
"following_count" = 0;
id = 2;
"image_path" = "http://members.sharjahcd.ae/images/000/000/009/1540737834886.jpg?1541043896";
"is_admin" = 1;
major = "";
"my_post_count" = 5;
name = "Admin MemberPortal";
"non_business_email" = "<null>";
passedout = "";
"phone_number" = 000000000;
photos = (
"http://members.sharjahcd.ae/images/000/000/004/IMG_20181029_150700.jpg?1540805844",
"http://members.sharjahcd.ae/images/000/000/012/20181028_173702.jpg?1541126171",
"http://members.sharjahcd.ae/images/000/000/011/20181028_173703.jpg?1541126151",
"http://members.sharjahcd.ae/images/000/000/010/20181028_173705.jpg?1541126144"
);
position = "<null>";
role = Admin;
stars = 3;
"total_membership_points" = 0;
};
}
这是我如何尝试解码它
let UserDatas = try JSONDecoder().decode(Token.self, from: data)
print("response : \(UserDatas)")
struct Token: Decodable {
let token: String
let user: [Response]
}
struct Response: Decodable {
let about_me: String
let address: String
let company: String
let description: String
let email: String
let events_count: Int
let followers_count: Int
let following_count: Int
let id = Int()
let image_path: String
let is_admin: String
let major: String
let my_post_count: Int
let name: String
let non_business_email: String
let passedout: String
let phone_number: Int
let photos: [String]
let position: String
let role: String
let stars: Int
let total_membership_points: Int
}
它不起作用并出现以下错误:
typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "user", intValue: nil)], debugDescription: "期望解码 Array 但找到了一个字典。",底层错误: nil))
如何制作将解码此 JSON 的结构?
解决方案
在您的 JSON 中,用户属性不是数组,但您[Response]
在代码中将其声明为数组 ()。将您的代码更改为:
struct Token: Decodable {
let token: String
let user: Response
}
此外,如果您在代码中声明的任何属性为 null 或 JSON 中缺失,您应该将它们设为可选。
在您的 JSON 中,公司似乎为空,因此请更改
let company: String
至
let company: String?
并对可能为空或缺失的其他属性执行相同的操作。
推荐阅读
- arrays - 使用 vbscript / hta 将文件夹中的所有文件加载到数组中?
- ios - 如何子类化 UIViewController 并快速添加属性?
- excel - (VBA) 从网络驱动器打开工作簿
- javascript - 如何将图像从云功能请求发送到视觉 API?
- r - prediction_regression_tree_caret:“[.data.frame”(m,labs)中的错误:选择了未定义的列
- android - 将 SNES 游戏模拟器与 Android Studio 集成?
- coq - 你能在 Coq 中通过类型签名找到函数吗?
- java - 如何使用 Junit 模拟 Builder
- javascript - Javascript 日期/时间检查错误
- python - 尝试列表操作时出现浮动对象错误