gpt4 book ai didi

swift - 如何创建一个结构体来将 JSON 反序列化为具有多级节点的结构

转载 作者:行者123 更新时间:2023-11-30 12:58:55 33 4
gpt4 key购买 nike

假设我有这个 JSON 例如

{
"kind": "Listing",
"data": {
"children": {
"domain": "twitlonger.com",
"other": "blahblah"
},
"children": {
"domain": "Otherplace.com",
"other": "blahblah"
}
}
}

我如何创建一个结构体来将其反序列化为例如

-伪代码-

struct JSONResp {
let kind:String
let data:[String: Any] {
let children:[String: Any] {
let domain:String
let other:String
}
}
}

extension JSONResp {
init?(json: [String: Any]) {
// Deserialize my stuff
}
}

我来自 Golang,我只能在那里做

type JSONResp struct {
Kind string
Data []children
}

type children struct {
Domain string
Other string
}

任何信息都会非常感谢。

这是我到目前为止所做的事情,我不知道它是否正确,只是按照我的直觉通过 Go 教给我的事情。

import Foundation

struct Subreddit {
let kind:String
let data:[Data]

}

struct Data {
let modhash:String
let children:[Children]
}

struct Children {
let kind:String
let data:[Payload]
}

struct Payload {
let contest_mode:Bool
let banned_by:NSNull
let domain:String
let subreddit:String
let selftext_html:String
let selftext:String
let likes:NSNull
let suggested_sort:NSNull
let saved:Bool
let id:String
let gilded:Int
let clicked:Bool
let author:String
let name:String
let score:Int
let over_18:Bool
let hidden:Bool
let thumbnail:String
let subreddit_id:String
let link_flair_css_class:String
let author_flair_css_class:String
let permalink:String
let Preview:[Preview]
let locked:Bool
let stickied:Bool
let created:Float64
let url:String
let author_flair_text:String
let quarantine:Bool
let title:String
let created_utc:Float64
let link_flair_text:String
let num_comments:UInt32
let visited:Bool
let ups:UInt32
}

struct Preview {
let images:[Images]
}

struct Images {
let source:[String:Any]
let resolutions:[String:Any]
let id:String
}

extension Subreddit {
init?(json: [String: Any]) {

}
}

最佳答案

对于给定的 JSON,声明两个结构体 ChildJSONResp

如果 kinddatachildren 的值之一丢失,初始化将会失败

struct Child {
let domain : String
let other : String
}

struct JSONResp {
let kind : String
var children = [Child]()

init?(json: [String: Any]) {
guard let kind = json["kind"] as? String,
let data = json["data"] as? [String:Any],
let kids = data["children"] as? [[String:Any]] else {
return nil
}
self.kind = kind
for child in kids {
if let domain = child["domain"] as? String,
let other = child["other"] as? String {
children.append(Child(domain: domain, other: other))
}
}
}
}

关于swift - 如何创建一个结构体来将 JSON 反序列化为具有多级节点的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40080815/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com