【问题标题】:How to access deeply nested data from json in swift? [closed]如何快速访问来自json的深层嵌套数据? [关闭]
【发布时间】:2021-08-31 22:24:56
【问题描述】:

我无法访问“WaznyDo”:“2021-09-18” Xcode 在尝试遍历数据模型时返回错误

{
    "lastUpdate": "2021-08-31 06:40:35",
    "karty": {
        "0000985766": {
            "bilety": [
                {
                    "Taryfa": [
                        "Miesiczny",
                        " wacny we wszystkie dni tygodnia",
                        " ulgowy",
                        " imienny"
                                ],
                    "Strefa": "Miasto Gdask",
                    "WaznyDo": "2021-09-18"
                }
            ]
        }
    }
}

我尝试了互联网上的所有解码器,但没有帮助

【问题讨论】:

  • 请学会分辨错误来自哪里:是编译器错误吗?你能启动你的应用程序吗?它会崩溃吗?它行为不端吗?它有什么作用,你期望它做什么?
  • 那么你的数据模型是什么?
  • “互联网上的每个解码器”?真的吗?特别是你唯一需要的是 Swift 的 JSONDecoder。如果您需要帮助,您需要展示您尝试过的内容(即代码和数据模型)、错误是什么以及发生的位置。
  • 您没有显示您的代码。您没有显示您拥有的确切错误消息。那么你的主题到底是什么?给我代码?

标签: json swift xcode


【解决方案1】:

而不是破坏性的 cmets - 这是一个解决方案:

您需要一些结构来为 JSON 数据的结构建模:

struct AllData: Codable {
    let lastUpdate: String
    let karty: Karty
}

struct Karty: Codable {
    let a0000985766: A0000985766
    
    enum CodingKeys: String, CodingKey {
        case a0000985766 = "0000985766"
    }
}

struct A0000985766: Codable {
    let bilety: [Bilety]
}

struct Bilety: Codable {
    let taryfa: [String]
    let strefa, waznyDo: String

    enum CodingKeys: String, CodingKey {
        case taryfa = "Taryfa"
        case strefa = "Strefa"
        case waznyDo = "WaznyDo"
    }
}

如果您将 JSON 数据存储在名为“data.json”的文件中并将其放在应用程序内的某个文件夹中,您可以通过 url 检索它:

let url = Bundle.main.url(forResource: "data", withExtension: "json")

现在这里有一个简单的视图控制器打印出你想要的数据:

import UIKit

class ViewController: UIViewController {

    var allData: AllData!
    // URL of JSON file
    let url = Bundle.main.url(forResource: "data", withExtension: "json")
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        do {
            allData = try JSONDecoder().decode(AllData.self, from: Data(contentsOf: url!))
        } catch {
            print("json error when trying to serialize")
        }
        
        
        // Output results, for example:
        print(allData!.lastUpdate)                          // 2021-08-31 06:40:35
        print(allData!.karty.a0000985766.bilety[0].waznyDo)  // 2021-09-18
    }
}

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多