将Codable转换为Json(字典)Swift
如何将Codable转换为Json词汇?它是一个嵌套结构 结构一将Codable转换为Json(字典)Swift,swift,codable,Swift,Codable,如何将Codable转换为Json词汇?它是一个嵌套结构 结构一 struct User: Codable { var name = "siddhant" var age = 12 var topInt = ["1","2","3"] var moreDetails = MoreDetails() } 结构二 struct MoreDetails: Codable { var image = "ImageUrl" } 当我把它转换成Json时,我需要把
struct User: Codable {
var name = "siddhant"
var age = 12
var topInt = ["1","2","3"]
var moreDetails = MoreDetails()
}
结构二
struct MoreDetails: Codable {
var image = "ImageUrl"
}
当我把它转换成Json时,我需要把它转换成Json,它只是把我转换成结构体,而不是第二个结构体
do {
let sid = try JSONEncoder().encode(users)
let dict = try JSONSerialization.jsonObject(with: sid, options: []) as? [String: Any]
print(dict)
}
catch {
print(error)
}
错误的电流输出:
(["name": siddhant, "topInt": <__NSArrayI 0x2831a1c20>(1,2,3),
"moreDetails": {
image = ImageUrl;
}, "age": 12])
您可以在Encodable上创建扩展,以便将其用于符合
Encodable
协议的所有元素
扩展名可编码{
变量字典:[字符串:任何]{
guard let data=try?JSONEncoder().encode(self)else{return nil}
return(try?JSONSerialization.jsonObject(with:data,options:.allowFragments)).flatMap{$0 as?[String:Any]}
}
}
在您的情况下,如果型号是user
类型的user
guard let userDict=user.dictionary else{return}
您需要指定所需的结果。遵循您的代码:
struct User: Codable {
var name = "siddhant"
var age = 12
var topInt = ["1","2","3"]
var moreDetails = MoreDetails()
var dictionaryJson: [String : Any] {
let encoder = JSONEncoder()
return (try? JSONSerialization.jsonObject(with: encoder.encode(self), options: .allowFragments)) as? [String: Any] ?? [:]
}
}
struct MoreDetails: Codable {
var image = "ImageUrl"
}
do {
let users = User()
let jsonData = try JSONEncoder().encode(users)
let jsonString = String(data: jsonData, encoding: .utf8)!
print(jsonString)
print("\n")
print(users.dictionaryJson)
print("\n")
print("Getting the var from dictionary")
print(users.dictionaryJson["moreDetails"])
} catch {
print(error)
}
输出:
{"age":12,"moreDetails":{"image":"ImageUrl"},"name":"siddhant","topInt":["1","2","3"]}
["topInt": <__NSArrayI 0x6000008e8150>(
1,
2,
3
)
, "name": siddhant, "age": 12, "moreDetails": {
image = ImageUrl;
}]
Getting the var from dictionary
Optional({
image = ImageUrl;
})
{“年龄”:12,“更多详情”:{“图像”:“图像URL”},“名称”:“siddhant”,“topInt”:[“1”,“2”,“3”]}
[“topInt”:(
1.
2.
3.
)
,“姓名”:siddhant,“年龄”:12,“更多详情”:{
image=ImageUrl;
}]
从字典中获取var
可选的({
image=ImageUrl;
})
我现在做的是
let users = User()
let staticJson = ["name": users.name,
"age": users.age,
"topInt": users.topInt,
"moreDetails": ["image": users.moreDetails.image]] as? [String: Any]
请编辑您的问题并显示您的用户声明和预期结果json结果不应该是字典数组吗?[[String:Any]]?您的预期输出它不是有效的json stringno普通字典请给我一个secI用户还有一个名为moreDetails的模型,更多详细信息无法转换我不获取更多详细信息Json@Leo. 如果您希望看到json数据,那么您可以这样使用:let user1=User()guard let data=try?jsonecoder().encode(user1)else{return}let json=String(data:data,encoding:.utf8)print(json)我可以在alamofire的参数中发送字符串吗?它不是var moreDetails:[moreDetails]=[moreDetails(),moreDetails()。如果您看到{image=ImageUrl;}没有被转换为Json,那么它将是{“image”:“ImageUrl”}@Swifty。Json是您的
sid
数据对象。你只需要用它来初始化一个新字符串。对不起,在你的文章被编辑之前,你期望得到一个包含更多细节的数组。如果你能找到一种获得所需输出的方法,谢谢你的帮助,所以请让我知道swift Codable的一些新内容
let users = User()
let staticJson = ["name": users.name,
"age": users.age,
"topInt": users.topInt,
"moreDetails": ["image": users.moreDetails.image]] as? [String: Any]