首页

如何处理 JSON 文件的数据(Data from JSON)

By 前端达人
Published in C-高级进阶
August 06, 2022
1 min read
如何处理 JSON 文件的数据(Data from JSON)

数据是任何应用程序的核心。如果您不从 Contentful 等第三方服务加载数据,则可以依赖 JSON 文件中的本地数据。让我们学习如何将 JSON 数据加载和解析到我们的 SwiftUI 应用程序中。

什么是JSON?

JSON,也称为 JavaScript Object Notation,是一种轻量级的数据格式。它适用于键值对,并且只接受某些类型的值:对象、数组、字符串、数字、布尔值、空值。下面是 JSON 的一个简单示例

{
        "name": "John",
        "age": 30,
        "car": null
}

创建你的数字模型(model)

接下来创建我们的数字模型,例如我们来创建一个 Animal 模型,每个模型都包含 id ,name,age 和 type 属性。**

// Animal.swift

struct Animal: Identifiable, Decodable {
        var id: Int
        var name: String
        var age: Int
        var type: String
}

创建 JSON 数据文件

基于刚才的 Animal 模型我们来创建 JSON 相关的数据,这里需要注意的是 JSON 数据的数据项的属性需要和 model 类型的属性一一对应。

// animalData.json
[
        {
                "id": 1001,
                "name": "Toto",
                "age": 3,
                "type": "Dog"
        },
        {
                "id": 1002,
                "name": "Betsy",
                "age": 7,
                "type": "Cat"
        },
        {
                "id": 1003,
                "name": "Olive",
                "age": 36,
                "type": "Tortoise"
        },
        {
                "id": 1004,
                "name": "Jupiter",
                "age": 10,
                "type": "Parrot"
        },
        {
                "id": 1005,
                "name": "Ulysse",
                "age": 17,
                "type": "Monkey"
        }
]

注意:为了防止程序报错,小编强烈建议用 JSON 工具进行验证其数据格式的正确性。

创建数据解析文件

继续我们来创建 ModelData 文件,来解析我们的 JSON 数据文件,示例代码如下

// ModelData.swift

var animals: [Animal] = load("animalData.json")

func load<T: Decodable>(_ filename: String) -> T {
    let data: Data

    guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
        else {
            fatalError("Couldn't find \(filename) in main bundle.")
    }

    do {
        data = try Data(contentsOf: file)
    } catch {
        fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
    }

    do {
        let decoder = JSONDecoder()
        return try decoder.decode(T.self, from: data)
    } catch {
        fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
    }
}

上面的 load() 函数从作为参数传递的文件路径中获取文件,并将 JSON 数据解码为 Swift 可以读取的格式。如果有错误,错误将打印在控制台中。

加载功能完成后,您的数据将可用并准备好使用,定义 animals 数组类型为 Animal 类型的数组,因为 load() 函数需要知道它应该输出什么类型的数据,如果成功返回将保存在 animals 中。

在界面中使用

最后我们需要在界面中渲染 animals 变量中的数据,我们可以使用 ForEach 循环来展示数据,示例代码如下

var body: some View {
        VStack {
                ForEach(animals) { animal in
                        Text("\(animal.name) is a \(animal.type) and is \(animal.age) years old.")
                }
        }
}

版权声明

注:本文属于原创文章,版权属于「前端达人」公众号及 SwiftUI.cc 所有,谢绝一切形式的转载

更多精彩内容,请关注「前端达人」

欢迎关注「前端达人」
欢迎关注「前端达人」


Tags

#advanced#swift#json
Previous Article
如何将数组转化成字符串(array joined)
前端达人

前端达人

专注前端知识分享

Table Of Contents

1
什么是JSON?
2
创建你的数字模型(model)
3
创建 JSON 数据文件
4
创建数据解析文件
5
在界面中使用
6
版权声明

Related Posts

如何在 WebView 里高亮显示代码片段(Code Highlighting)
August 15, 2022
1 min

前端学习站

前端达人官网VUE官网React官网TypeScript官网

公众号:前端达人

京ICP备16033841号-8