gpt4 book ai didi

arrays - Swift - json 嵌套数组不返回值

转载 作者:行者123 更新时间:2023-11-30 11:09:23 24 4
gpt4 key购买 nike

我试图从 JSON 文件的“导入”中获取数组,但数组正在返回编码。

[服务器名称.JSONNodeValue、服务器名称.JSONNodeValue、服务器名称.JSONNodeValue、服务器名称.JSONNodeValue、服务器名称.JSONNodeValue、服务器名称.JSONNodeValue]

我知道数据可以被看作是我打印 JSONNode 文件中数据的值,它显示为 https://servername.com/storage/sessions/00167/imports( “电影1.mov”, “电影3.mov”, “电影2.mov”, “._movie1.mov”, “._movie2.mov”, “._movie3.mov”)

这不是我的代码,也是我苦苦挣扎的原因,因为我在 swift 上还是个新手。

我的 JSON 文件看起来与此类似。

{
"id": 135
"name": Test
"angles" [
{
"id": 35,
"name": "test",
"mp4": "http:/0.0.0:3000/storage/seesion/00138/url.mp4"
}
]
"imports" [
movie1.mp4,
movie2.mp4,
movie3.mp4
]
}

Swift 代码 - session 文件

struct Session {
var id: Int
var name: String
var angles: [Angle] = []
var imports: [Any]

extension Session {
init(fromDict dict: [String: AnyObject]){
let node = JSONNodeValue(dict)
let sessionId = node["id"].int ?? 0
self.id = sessionId
self.name = node["name"].string ?? "???"
print(name)
self.imports = node["imports"].arrayOrEmpty
self.angles = node["angles"].arrayOrEmpty.map { angleDict in
Angle(fromDict: angleDict.object!)
}

处理 JSON 的 JSONnode 文件

protocol JSONNode {
subscript(key: String) -> JSONNode { get }
var int: Int? { get }
var double: Double? { get }
var string: String? { get }
var bool: Bool? { get }
var date: Date? { get }
var array: [JSONNode]? { get }
var arrayOrEmpty: [JSONNode] { get }
var object: [String: Any]? { get }
var objectOrEmpty: [String: Any] { get }
}

class JSONNodeValue : JSONNode {
static func parse (_ data: Data) -> JSONNode {
if let root = try? JSONSerialization.jsonObject(with: data) {
return JSONNodeValue(root)
} else {
return JSONNodeNone.instance
}
}

var value: Any

init(_ value: Any) {
self.value = value
print(value) // SHOWS THE DATA I NEED
}

subscript(key: String) -> JSONNode {
if let object = value as? [String: Any], let subvalue = object[key] {
return JSONNodeValue(subvalue)
} else {
return JSONNodeNone.instance
}
}

var int: Int? {
return value as? Int
}

var double: Double? {
return value as? Double
}

var string: String? {
return value as? String
}

var bool: Bool? {
return value as? Bool
}

var date: Date? {
if let formatted = string {
return Date.fromIso8601(formatted)
} else {
return nil
}
}

var array: [JSONNode]? {
if let array = value as? [Any] {
return array.map { JSONNodeValue($0) }
} else {
return nil
}
}

var arrayOrEmpty: [JSONNode] {
return array ?? []
}

var object: [String: Any]? {
return value as? [String: Any]
}

var objectOrEmpty: [String : Any] {
return object ?? [:]
}
}

有人能给我指出正确的方向或其他可以帮助我解决这个问题的已回答问题吗?谢谢

最佳答案

结构看起来不错,但是删除了[Angle]后面的= [],但是你应该使用Codable协议(protocol)来解析JSON像这样:

struct Session: Codable {
var id: Int
var name: String
var angles: [Angle]
var imports_dir_contents: [Any]

然后创建另一个结构体来获取角度

struct Angle: Codable
let id: Int
let name: String
let mp4: String

然后,您希望通过传入从网络调用检索的数据来使用 Codable 协议(protocol)方法进行解析。

do {

let newJSONDecoder = JSONDecoder()
let session = try newJSONDecoder.decode(Session.self, from:data)

let anglesArray = session.angles // or use whatever array property you want


} catch {
print("error while parsing:\(error)")
}

关于arrays - Swift - json 嵌套数组不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52324184/

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