首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何读取本地JSON文件并输出JSON?

如何读取本地JSON文件并输出JSON?
EN

Stack Overflow用户
提问于 2019-11-07 01:41:32
回答 2查看 144关注 0票数 0
代码语言:javascript
运行
复制
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文件并输出json。但是json = try? JSONSerialization.jsonObject(with: data)行给出了一个错误,即Cannot assign value of type 'Any?' to type 'JSON'

我的json数据看起来

代码语言:javascript
运行
复制
{
    "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"
                }
            ]
        }
    ]
}

当我将输出类型更改为Any?时,就会打印输出,似乎缺少了一些元素。

代码语言:javascript
运行
复制
{
    leagues =     (
                {
            games =             (
                                {
                    "game_state" = Final;
                    "game_time" = 1456662600;
                    ...

我怎么才能修好它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-07 03:08:17

检查下面的解决方案,我使用了可编码的JSON解码。

代码语言:javascript
运行
复制
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")
票数 2
EN

Stack Overflow用户

发布于 2019-11-07 02:32:39

步骤1:-首先在项目中创建一个模态类

代码语言:javascript
运行
复制
 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"
        }
    }

第二步:-在得到响应后,写这一行,

代码语言:javascript
运行
复制
 let decoder = JSONDecoder()
 let obj = try! decoder.decode(Welcome.self, from: jsonData!)

,如果你还有问题,请告诉我

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58740794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档