Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Codable转换为Json(字典)Swift_Swift_Codable - Fatal编程技术网

将Codable转换为Json(字典)Swift

将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时,我需要把

如何将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时,我需要把它转换成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]