我有这门课:
class User {
let name: String
let email: String
let password: String
let provider: String
let uid: String
init (name: String, email:String, password: String, provider: String, uid: String) {
self.name = name
self.email = email
self.password = password
self.provider = provider
self.uid = uid
}
var dictionary: [String: [String: Any]] {
return ["user" : ["name": name, "email": email, "password": password, "provider": provider, "uid": uid]
]
}
var nsDictionary: NSDictionary {
return dictionary as NSDictionary
}
}
当我创建用户时:
let userNew = User(name: userName!, email: userEmail!, password: "", provider: provider, uid: userId!)
我的用户是这样创建的:
Optional({
user = {
email = "[email protected]";
name = "Juan Gil";
password = "";
provider = Facebook;
uid = 1925035627521626;
};
})
但我需要所有值“”
Optional({
user = {
email = "[email protected]";
name = "Juan Gil";
password = "";
provider = "Facebook";
uid = "1925035627521626";
};
})
如何用引号获取所有值?
提前致谢!
您对“user = {...}”输出中的双引号的查询表明,在打印描述字典时,您可能会将JSON与输出混淆。他们是两个完全不同的东西。
如果你想在Swift 4中构建JSON,你可以使用Encodable
和JSONEncoder
:
struct User: Encodable {
let name: String
let email: String
let password: String
let provider: String
let uid: String
}
然后你可以这样做:
let user = User(name: "Juan Gil", email: "[email protected]", password: "", provider: "Facebook", uid: "1925035627521626")
let data = try! JSONEncoder().encode(["user": user])
如果要检查结果:
let string = String(data: data, encoding: .utf8)!
print(string)
它导致:
{"user":{"email":"[email protected]","password":"","provider":"Facebook","uid":"1925035627521626","name":"Juan Gil"}}
要将对象编码为JSON数据,应使对象符合Encodable协议,并使用JSONEncoder编码方法将对象转换为JSON数据。请注意,您也可以使用类,但最好使用结构:
struct User: Codable {
let name: String
let email: String
let password: String
let provider: String
let uid: String
}
有时,在发布JSON数据时,API可能需要对对象键进行排序。为了实现这一点,您需要将编码器outputFormatting属性设置为.sortedKeys
:
let jsonObject = ["user" : User(name: "Juan Gil", email: "[email protected]", password: "", provider: "Facebook", uid: "1925035627521626")]
do {
let encoder = JSONEncoder()
encoder.outputFormatting = .sortedKeys
let jsondata = try encoder.encode(jsonObject)
print(String(data: jsondata, encoding : .utf8)!) // "{"user":{"email":"[email protected]","name":"Juan Gil","password":"","provider":"Facebook","uid":"1925035627521626"}}\n"
} catch {
print(error)
}