如何使用 Swift 创建 JSON Codable [关闭]

Posted

技术标签:

【中文标题】如何使用 Swift 创建 JSON Codable [关闭]【英文标题】:How to create JSON Codable using Swift [closed] 【发布时间】:2019-08-14 19:45:30 【问题描述】:

就我而言,我正在尝试从我的 JSON 中获取数据。我发现编码是从JSONios 中获取和维护数据的最简单方法之一。我想知道如何将我的 JSON 下面转换为Codable

下面是我的 JSON

  
   "status": true,
   "data" :   
      "school":[  
            
            "id":"01",
            "name":"Avision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         ,
           
            "id":"01",
            "name":"Bvision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         

      ],
      "college":[ 
            
            "id":"01",
            "name":"Avision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         ,
           
            "id":"01",
            "name":"Bvision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         

      ],
      "office":[  
            
            "id":"01",
            "name":"Avision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         ,
           
            "id":"01",
            "name":"Bvision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         

      ],
      "organisation":[  
            
            "id":"01",
            "name":"Avision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         ,
           
            "id":"01",
            "name":"Bvision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         

      ],
      "central":[  
           
            "id":"01",
            "name":"Avision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         ,
           
            "id":"01",
            "name":"Bvision",
            "date":"12 - 01 - 2018",
            "group":["A","B","C"]
         
      ]
   

这里,多个数组的多个值可用,它会增加,有时可能有机会根据服务器数据显示空数组。如何创建codable

【问题讨论】:

请勿转发问题。在过去的几天里,你问了很多类似的问题。与其转发问题,不如通过编辑和添加 cmets 中部分要求的更多信息来改进您现有的问题。 @vadian 非常感谢。顺便说一句,我没有重新发布我的新疑问,但它可能看起来一样。我想在这里学习,请给我一些解决方案。 您在之前的一个问题中得到了使用quicktype.io 的建议,您尝试过吗?您是否对使用Codable 进行过任何研究?你的问题是广泛的,同时要求很多。尝试一次研究并询问一个主题。 @Joakim Danielson 我只问一个问题,如何将 JSON 以上更改为 Codable。我使用了 quick type.io 但它没有生成正确的。 是的,现在你是,很好。如果您认为 QuickType 没有生成正确的结构,那么您必须有一些代码并且知道它有什么问题以及您希望它做什么。 【参考方案1】:

这是一个起点。结构非常简单。如果Division 数组之一为空(在您之前的一个问题中提出),则相应的数组也为空。

struct Root : Decodable 
    let status : Bool
    let data: DivisionData


struct DivisionData : Decodable 
    let school, college, office, organisation, central : [Division]


struct Division : Decodable 
    let id, name, date : String
    let group : [String]

【讨论】:

但我在尝试获取根值时出错 什么错误?如果你写JSONDecoder().decode(Root.self, from:...,结构肯定解码问题中的JSON。但是,如果这是伪 JSON,我无法帮助您。 出现错误:libMobileGestalt MobileGestalt.c:890:此平台不支持 MGIsDeviceOneOfType。 keyNotFound(CodingKeys(stringValue: "group", intValue: nil), Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "data", intValue: nil), CodingKeys(stringValue: "central", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No value associated with key CodingKeys(stringValue: \"group\", intValue: nil) (\"group\").", underlyingError: nil )) 如果一个部门没有一个组,就让它成为可选let group : [String]?你为什么不提供真实数据? 很棒的解决方案。它的工作谢谢大师:)

以上是关于如何使用 Swift 创建 JSON Codable [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 创建 JSON Codable [关闭]

如何使用 SwiftyJSON(在 Swift 中)基于 JSON 对象数组创建对象数组?

如何从模型数据 Swift 创建 JSON 字符串? [关闭]

Swift 3 - 无法弄清楚如何从 jsonArray 创建 json 对象

SwiftUI 如何从响应 JSON API 中分离单个数据

如何使用 swift 2.0 制作 http post json 请求参数