swift将struct转化为json

来源:互联网 发布:会议速记软件 编辑:程序博客网 时间:2024/06/05 18:06









 struct Car: JSONSerializable {
        var manufacturer: String
        var model: String
        var mileage: Float
        
        var owner: Owner
    }
    
    struct Owner: JSONSerializable {
        var name: String
    }



  let car = Car(manufacturer: "Tesla", model: "Model T", mileage: 1234.56, owner: Owner(name: "Emil"))
        
        if let json = car.toJSON() {
            print(json)
            
        }



//
//  JSONSerializable.swift
//  Longsheng
//
//  Created by 关洪昌 on 16/9/30.
//  Copyright © 2016年 夸克时代. All rights reserved.
//

protocol JSONRepresentable {
    var JSONRepresentation: AnyObject { get }
}

protocol JSONSerializable: JSONRepresentable {
}

extension JSONSerializable {
    var JSONRepresentation: AnyObject {
        var representation = [String: AnyObject]()
        
        for case let (label?, value) in Mirror(reflecting: self).children {
            switch value {
            case let value as JSONRepresentable:
                representation[label] = value.JSONRepresentation
                
            case let value as NSObject:
                representation[label] = value
                
            default:
                // Ignore any unserializable properties
                break
            }
        }
        
        return representation as AnyObject
    }
}

extension JSONSerializable {
    func toJSON() -> String? {
        let representation = JSONRepresentation
        
        guard JSONSerialization.isValidJSONObject(representation) else {
            return nil
        }
        
        do {
            let data = try JSONSerialization.data(withJSONObject: representation, options: [])
            return String(data: data, encoding: String.Encoding.utf8)
        } catch {
            return nil
        }
    }
}


0 0
原创粉丝点击