首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSONDecoder Swift解码

使用JSONDecoder Swift解码
EN

Stack Overflow用户
提问于 2019-02-17 15:44:51
回答 2查看 1.9K关注 0票数 1

与下面的json对应的数据模型是什么?

代码语言:javascript
复制
{ 
   dog:
   {
      type: "dog",
      logoLocation: "url1"
   },
   pitbull: 
   {
       type: "pitbull",
       logoLocation: "url2"
    }
}

这是一本字典所以我试了一下

代码语言:javascript
复制
class PhotosCollectionModel: Codable {
    var photoDictionary: Dictionary<String, PhotoModel>?
}

class PhotoModel: Codable {
    var type: String?
    var logoLocation: String?
}

但这是行不通的。有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-17 15:50:15

你需要

代码语言:javascript
复制
struct Root: Codable {
    let dog, pitbull: Dog
}

struct Dog: Codable {
    let type, logoLocation: String  // or let logoLocation:URL
}

正确的json

代码语言:javascript
复制
{
    "dog":
    {
        "type": "dog",
        "logoLocation": "url1"
    },
    "pitbull":
    {
        "type": "pitbull",
        "logoLocation": "url2"
    }
}

用于动态

只需在解码器中使用[String:Dog]

代码语言:javascript
复制
    do {

        let res  = try JSONDecoder().decode([String:Dog].self,from:data)
    }
    catch {

        print(error)
    }
票数 3
EN

Stack Overflow用户

发布于 2019-02-17 15:56:37

我会跳过第一节课

代码语言:javascript
复制
class PhotoModel: Codable {
    var type: String
    var logoLocation: String
}

然后像字典一样解码

代码语言:javascript
复制
do {
    let decoder = JSONDecoder()
    let result = try decoder.decode([String: PhotoModel].self, from: data)
    result.forEach { (key,value) in
        print("Type: \(value.type), logo: \(value.logoLocation) (key: \(key))")
    }
} catch  {
    print(error)
}

输出

类型:狗,标志: url1 (键:狗) 型号: pitbull,徽标: url2 (键: pitbull)

这两个属性实际上都是可选的,如果不是,我建议您删除?中的任何不必要的PhotoModel (我做了)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54734856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档