【问题标题】:how to parse json into struct in swift如何在swift中将json解析为struct
【发布时间】:2014-12-10 06:30:59
【问题描述】:

我有这样的结构:

struct Company {

    let name:String
    let id:Int
} 

我想从 JSON 中解析一组公司。

您能帮我在 Swift 中如何做到这一点吗?

【问题讨论】:

标签: json parsing swift


【解决方案1】:

这是为未来的人们准备的。在 Swift 4 中,JSONDecoder 有一个非常好的解决方案。

使用 Alamofire 代码将如下所示 -

Alamofire.request(Router.login(parameters: parameters)).responseJSON {
        response in
        switch response.result{
        case .success(_):
            let decoder = JSONDecoder()
            guard let _ = response.data else{
                return
            }
            do {
                let loginDetails = try decoder.decode(LoginDetails.self, from: response.data!)
                // get your details from LoginDetails struct
            } catch let err{
                print(err)
            }


        case .failure(let error):
            print(error)
        }
    }

https://developer.apple.com/documentation/foundation/jsondecoder

https://medium.com/xcblog/painless-json-parsing-with-swift-codable-2c0beaeb21c1

希望对你有帮助!!!

【讨论】:

  • guard let _ 是非常糟糕的语法,如果您以后确实需要绑定变量。
  • 我认为这里的重点是如何将 JSON 解码为结构。你可以用任何你想要的方式打开可选的。
【解决方案2】:

不幸的是,JSON 解析在 swift 中并不容易。 你应该使用NSJSONSerialization 类来做。

这里有很多examples 可以查看。

【讨论】:

    【解决方案3】:

    在 Swift3 中,可以将字典直接转换为结构使用 MappingAce

    struct Company: Mapping {
        let name:String
        let id:Int
    }
    
    let companyInfo: [String : Any] = ["name" : "MappingAce", "id" : 1]
    
    let company = Company(fromDic: companyInfo)
    print(company.name)//"MappingAce"
    print(company.id)  // 1
    

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 2017-02-07
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多