如何在 Swift 中解码这个 JSON 数据?

Posted

技术标签:

【中文标题】如何在 Swift 中解码这个 JSON 数据?【英文标题】:How do I decode this JSON Data in Swift? 【发布时间】:2020-08-22 18:22:32 【问题描述】:

如何解码这个 JSON 数据?

我使用“向下钻取”方法完成了它,在该方法中我不断调用每个键并打印值。我也尝试了数据模型,但它从未奏效。我可能做错了什么,但我不知道是什么。

提前致谢,如果您需要更多信息,尽管问,我对 Swift 和 *** 还很陌生。

   
       "items":[
          
             "id":16000014,
             "name":"BO",
             "starPowers":[
                
                   "id":23000090,
                   "name":"CIRCLING EAGLE"
                ,
                
                   "id":23000148,
                   "name":"SNARE A BEAR"
                
             ],
             "gadgets":[
                
                   "id":23000263,
                   "name":"SUPER TOTEM"
                ,
                
                   "id":23000289,
                   "name":"TRIPWIRE"
                
             ]
          ,
          
             "id":16000015,
             "name":"PIPER",
             "starPowers":[
                
                   "id":23000091,
                   "name":"AMBUSH"
                ,
                
                   "id":23000152,
                   "name":"SNAPPY SNIPING"
                
             ],
             "gadgets":[
                
                   "id":23000268,
                   "name":"AUTO AIMER"
                ,
                
                   "id":23000291,
                   "name":"HOMEMADE RECIPE"
                
             ]
          
       ],
       "paging":
          "cursors":
    
          
       
    

【问题讨论】:

这应该会有所帮助:avanderlee.com/swift/json-parsing-decoding 还有文档:developer.apple.com/documentation/foundation/jsondecoder 【参考方案1】:

在 swift 中解码 JSON 非常简单。只需使用 JSONDecoder 类。首先,像这样为您的 json 响应创建一个 Codable

struct Items: Codable 
    let items: [Item]
    let paging: Paging


struct Item: Codable 
    let id: Int
    let name: String
    let starPowers, gadgets: [Gadget]


struct Gadget: Codable 
    let id: Int
    let name: String


struct Paging: Codable 
    let cursors: Cursors


struct Cursors: Codable 

 

然后像这样用它来解析你的JSON

 let decoder = JSONDecoder()

do 
    let items = try decoder.decode(Items.self, from: jsonData)
    print(items)
    // Do something with the items here

 catch 
    print(error.localizedDescription)


【讨论】:

【参考方案2】:
struct Name 
    var id:Int
    var name:String


struct Cursor 
    // Your cursor model


struct Paging 
    var cursors: Cursor


struct Items 
    var id:Int
    var name:String
    var starPowers:[Name]
    var gadgets:[Name]


struct MainModel 
     var items : [Items]
     var paging : Paging

您可以使用let yourData = try! JSONDecoder().decode(MainModel.self, from: jsonData) 对该数据进行解码,以获得所需的 JSON 数据。

【讨论】:

以上是关于如何在 Swift 中解码这个 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中使用动态键(在根级别)解码此 JSON?

当您不知道 Swift 中的项目类型时,如何解码嵌套的 JSON 数据? [复制]

通过使用 Alamofire 和解码获取 JSON - Swift 4

如何在 Swift 中解码具有许多唯一键的嵌套 JSON?

如何在 Swift 中解码一个命名的 json 对象数组

如何在 swift 4 中使用 JSONDecoder 从嵌套 JSON 中获取数据?