使用swiftyjson库swift嵌套Json数据获取和附加问题

时间:2019-02-11 18:57:16

标签: ios json swift swifty-json

通过使用swiftjson库swift在嵌套json中获取数据追加问题。

我创建了两个结构,但是在附加最终列表时出现错误。追加数据时获取错误。我是否很好地创建了结构。

我的结构

struct GistModel {
    var comments : Int!
    var commentsUrl : String!
    var descriptionField : String!
    var owner : Owner!
}
struct Owner{
    var login : String!
}

JSON数据结果:

{
            url: "https://api.github.com/gists/7e624eed62b3a317541791d719dcacf2",
            forks_url: "https://api.github.com/gists/7e624eed62b3a317541791d719dcacf2/forks",
            commits_url: "https://api.github.com/gists/7e624eed62b3a317541791d719dcacf2/commits",
            id: "7e624eed62b3a317541791d719dcacf2",
            node_id: "MDQ6R2lzdDdlNjI0ZWVkNjJiM2EzMTc1NDE3OTFkNzE5ZGNhY2Yy",
            git_pull_url: "https://gist.github.com/7e624eed62b3a317541791d719dcacf2.git",
            git_push_url: "https://gist.github.com/7e624eed62b3a317541791d719dcacf2.git",
            html_url: "https://gist.github.com/7e624eed62b3a317541791d719dcacf2",
            files: 
        {
            GistTest2: 
        {
            filename: "GistTest2",
            type: "text/plain",
            language: null,
            raw_url: "https://gist.githubusercontent.com/MasamMahmood/7e624eed62b3a317541791d719dcacf2/raw/7302f0d923e9e08b0e502ad9df762a1b2aa072e1/GistTest2",
            size: 29
            }
            },
            public: true,
            created_at: "2019-02-01T18:41:39Z",
            updated_at: "2019-02-01T19:01:16Z",
            description: "Gist Test 2",
            comments: 0,
            user: null,
            comments_url: "https://api.github.com/gists/7e624eed62b3a317541791d719dcacf2/comments",
            owner: 
        {
            login: "MasamMahmood",
            id: 36441313,
            node_id: "MDQ6VXNlcjM2NDQxMzEz",
            avatar_url: "https://avatars3.githubusercontent.com/u/36441313?v=4",
            gravatar_id: "",
            url: "https://api.github.com/users/MasamMahmood",
            html_url: "https://github.com/MasamMahmood",
            followers_url: "https://api.github.com/users/MasamMahmood/followers",
            following_url: "https://api.github.com/users/MasamMahmood/following{/other_user}",
            gists_url: "https://api.github.com/users/MasamMahmood/gists{/gist_id}",
            starred_url: "https://api.github.com/users/MasamMahmood/starred{/owner}{/repo}",
            subscriptions_url: "https://api.github.com/users/MasamMahmood/subscriptions",
            organizations_url: "https://api.github.com/users/MasamMahmood/orgs",
            repos_url: "https://api.github.com/users/MasamMahmood/repos",
            events_url: "https://api.github.com/users/MasamMahmood/events{/privacy}",
            received_events_url: "https://api.github.com/users/MasamMahmood/received_events",
            type: "User",
            site_admin: false
            },
            truncated: false
    }

Swift:

    switch response.result{
                    case .success(let value):
                        let json = JSON(value)
                        print(json)



                        for subJson in json.arrayValue {
                            let comm = subJson["comments"].intValue
                            let commurl = subJson["comments_url"].stringValue
                            let desc = subJson["description"].string
                            //let age = subJson["owner"]["login"].string

                            for item in subJson{
                           let login = subJson["owner"]["login"].string
                            // do something

                            }
                            let user = GistModel(comments: comm, commentsUrl: commurl, descriptionField: desc, login: login)//, owner: login)

                            self.DataList.append(user)
                            print(user)
                        }

我是新手,在添加列表时出错。 “使用未解决的标识符'login'”。

1 个答案:

答案 0 :(得分:2)

如果您愿意使用Codable转到标准json处理,那么它将起作用。首先让结构体实现Decodable

struct GistModel: Decodable {
    let comments: Int
    let commentsUrl: String
    let description: String //Changed the name here
    let owner: Owner
}

struct Owner: Decodable {
    let login: String
}

像这样完成编码

do {
    let decoder = JSONDecoder()
    decoder.keyDecodingStrategy = .convertFromSnakeCase
    let result = try decoder.decode([GistModel].self, from: data)
    print(result[0].owner.login)
    print(result[0].comments)
    print(result[0].commentsUrl)
} catch {
    print(error)
}