swiftUI之json文件解析

解析json文件:

创建 .json文件:选择swift file->文件名填写xx.json->弹出提示选择use  .json

内容格式如下:

[

    {   "id":1,

        "name": "lambo1",

        "age": 100,

        "imageName":"center"

    },

    {   "id":2,

        "name": "lambo2",

        "age": 1,

       "imageName":"center"

    }

]

解析json:

Landmark.swift文件内容

import Foundation
import SwiftUI

struct Landmark:  Hashable, Codable {
    var id: Int
     var name: String
     var age: Int
   

     private var imageName: String
     var image: Image {
         Image(imageName)
     }
}
解析
var landmarks: [Landmark] = load("landmarkData.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)")
    }
}

解析json字符串:普通json字符串,没有嵌套

解析
var landmarks: [Landmark] = loadjsonstr()
func loadjsonstr<T:Decodable>()->T{

 let jsonStr = "[{\"id\": 1, \"age\": 100,\"imageName\": \"center\", \"name\": \"name1\"}, {\"id\": 2,\"age\": 1,\"imageName\": \"center\",\"name\":\"name2\"}]"

    if let jsonData = jsonStr.data(using: String.Encoding.utf8, allowLossyConversion: false) {

        do {

            let decoder = JSONDecoder()

            return   try decoder.decode(T.self, from: jsonData)

        } catch {

            fatalError("Couldn't parse  \(T.self):\n\(error)")

        }

    }

    return [:] as! T

}

解析json字符串:普通json字符串,有嵌套

一级:
import Foundation
import SwiftUI

struct Landmark:  Hashable, Codable {
     var id: Int
     var name:[Name]
     var age: Int
   
     private var imageName: String
     var image: Image {
         Image(imageName)
     }
}
二级
import SwiftUI

struct Name:Hashable, Codable {
    var name:String
}
解析
var landmarks: [Landmark] = loadjsonstr()

func loadjsonstr<T:Decodable>()->T{

    let jsonStr = "[{\"id\": 1, \"age\": 100,\"imageName\": \"center\", \"name\": [{\"name\": \"公司\",\"number\": \"123456\"}, {\"name\": \"家庭\"}]}, {\"id\": 2,\"age\": 1,\"imageName\": \"center\",\"name\": [{ \"name\": \"公司\"}]}]"
     
    if let jsonData = jsonStr.data(using: String.Encoding.utf8, allowLossyConversion: false) {
        do {
            let decoder = JSONDecoder()
            return   try decoder.decode(T.self, from: jsonData)
        } catch {
            fatalError("Couldn't parse  \(T.self):\n\(error)")
        }
    }
    return [:] as! T
}

调用:landmark.name[0].name

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值