簡體   English   中英

如何在 Z818056DBD7E20124320Z6B971 中讀取本地 JSON 文件和 output JSON 文件

[英]How to read local JSON file and output JSON in swift?

import Foundation

class ReadLocalJSON {

    static func readJSONFromFile(fileName: String) -> JSON
    {
        var json: JSON
        if let path = Bundle.main.path(forResource: fileName, ofType: "json") {
            do {
                let fileUrl = URL(fileURLWithPath: path)
                let data = try Data(contentsOf: fileUrl, options: .mappedIfSafe)
                json = try? JSONSerialization.jsonObject(with: data)
            } catch {
                print("Something goes wrong when reading local json file.")
            }
        }
        return json
    }

}

我嘗試讀取本地 json 文件和 output json。 但是行json = try? JSONSerialization.jsonObject(with: data) json = try? JSONSerialization.jsonObject(with: data)給出一個錯誤,提示Cannot assign value of type 'Any?' to type 'JSON' Cannot assign value of type 'Any?' to type 'JSON'

我的 json 數據看起來像

{
    "leagues":
    [
        {   "name": "Hockey",
            "image": "hockey",
            "games":
            [
                {
                    "game_state": "Final",
                    "game_time": 1456662600,
                    "home_team_city": "Alberta",
                    "home_team_name": "Pigs",
                    "home_team_score": 1,
                    "home_team_logo": "pig",
                    "visit_team_city": "Montreal",
                    "visit_team_name": "Fishes",
                    "visit_team_score": 4,
                    "visit_team_logo": "fish"
                }
            ]
        }
    ]
}

當我將 output 類型更改為Any? 我打印了 output ,它似乎缺少一些元素。

{
    leagues =     (
                {
            games =             (
                                {
                    "game_state" = Final;
                    "game_time" = 1456662600;
                    ...

我該如何解決?

檢查下面的解決方案,我使用 Codable 進行 JSON 解碼。

import Foundation


struct Sports: Codable {
    let leagues: [League]
}


struct League: Codable {
    let name, image: String
    let games: [Game]
}


struct Game: Codable {
    let gameState: String
    let gameTime: Int
    let homeTeamCity, homeTeamName: String
    let homeTeamScore: Int
    let homeTeamLogo, visitTeamCity, visitTeamName: String
    let visitTeamScore: Int
    let visitTeamLogo: String

    enum CodingKeys: String, CodingKey {
        case gameState = "game_state"
        case gameTime = "game_time"
        case homeTeamCity = "home_team_city"
        case homeTeamName = "home_team_name"
        case homeTeamScore = "home_team_score"
        case homeTeamLogo = "home_team_logo"
        case visitTeamCity = "visit_team_city"
        case visitTeamName = "visit_team_name"
        case visitTeamScore = "visit_team_score"
        case visitTeamLogo = "visit_team_logo"
    }
}

class ReadLocalJSON {

    static func readJSONFromFile(fileName: String) -> Sports?
    {
        let path = Bundle.main.path(forResource: fileName, ofType: "json")
        let url = URL(fileURLWithPath: path!)
        let sportsData = try? Data(contentsOf: url)
        guard
            let data = sportsData
            else { return nil  }
        do {
            let result = try JSONDecoder().decode(Sports.self, from: data)
            print(result)
            return result
        } catch let error {
            print("Failed to Decode Object", error)
            return nil
        }
    }
}


ReadLocalJSON.readJSONFromFile(fileName: "test")

第 1 步:- 首先在您的項目中制作模態 class

 struct Welcome: Codable {
        let leagues: [League]?
    }

    // MARK: - League
    struct League: Codable {
        let name, image: String?
        let games: [Game]?
    }

    // MARK: - Game
    struct Game: Codable {
        let gameState: String?
        let gameTime: Int?
        let homeTeamCity, homeTeamName: String?
        let homeTeamScore: Int?
        let homeTeamLogo, visitTeamCity, visitTeamName: String?
        let visitTeamScore: Int?
        let visitTeamLogo: String?

        enum CodingKeys: String, CodingKey {
            case gameState = "game_state"
            case gameTime = "game_time"
            case homeTeamCity = "home_team_city"
            case homeTeamName = "home_team_name"
            case homeTeamScore = "home_team_score"
            case homeTeamLogo = "home_team_logo"
            case visitTeamCity = "visit_team_city"
            case visitTeamName = "visit_team_name"
            case visitTeamScore = "visit_team_score"
            case visitTeamLogo = "visit_team_logo"
        }
    }

第2步: - 得到響應后寫下這一行,

 let decoder = JSONDecoder()
 let obj = try! decoder.decode(Welcome.self, from: jsonData!)

如果您仍有問題,請告訴我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM