如何在swift中解析JSON文件?

 mobiledu2502891487 发布于 2023-01-11 21:23

我有一个JSON文件,想要解析并使用表视图中的对象列表.任何人都可以共享代码来解析swift中的JSON文件.

3 个回答
  • 不可能更简单:

    import Foundation
    
    let jsonData: Data = /* get your json data */
    let jsonDict = try JSONSerialization.jsonObject(with: jsonData) as? NSDictionary
    

    2023-01-11 21:27 回答
  • 我刚刚编写了一个名为JSON的类,它使Swift中的JSON处理像ES5中的JSON对象一样简单.

    https://github.com/dankogai/swift-json/

    将你的swift对象转换为JSON,如下所示:

    let obj:[String:AnyObject] = [
        "array": [JSON.null, false, 0, "",[],[:]],
        "object":[
            "null":   JSON.null,
            "bool":   true,
            "int":    42,
            "double": 3.141592653589793,
            "string": "a ?\t?\n",
            "array":  [],
            "object": [:]
        ],
        "url":"http://blog.livedoor.com/dankogai/"
    ]
    
    let json = JSON(obj)
    json.toString()
    

    ......或者字符串......

    let json = JSON.parse("{\"array\":[...}")
    

    ...或URL.

    let json = JSON.fromURL("http://api.dan.co.jp/jsonenv")
    Tree Traversal
    

    只需通过下标遍历元素:

    json["object"]["null"].asNull       // NSNull()
    // ...
    json["object"]["string"].asString   // "a ?\t?\n"
    json["array"][0].asNull             // NSNull()
    json["array"][1].asBool             // false
    // ...
    

    就像SwiftyJSON一样,如果下标条目不存在,您也不必担心.

    if let b = json["noexistent"][1234567890]["entry"].asBool {
        // ....
    } else {
        let e = json["noexistent"][1234567890]["entry"].asError
        println(e)
    }
    

    如果您厌倦了下标,请添加您的方案,如下所示:

    //// schema by subclassing
    class MyJSON : JSON {
        init(_ obj:AnyObject){ super.init(obj) }
        init(_ json:JSON)  { super.init(json) }
        var null  :NSNull? { return self["null"].asNull }
        var bool  :Bool?   { return self["bool"].asBool }
        var int   :Int?    { return self["int"].asInt }
        var double:Double? { return self["double"].asDouble }
        var string:String? { return self["string"].asString }
    }
    

    然后你去:

    let myjson = MyJSON(obj)
    myjson.object.null
    myjson.object.bool
    myjson.object.int
    myjson.object.double
    myjson.object.string
    // ...
    

    希望你喜欢.

    使用新的xCode 7.3+,将您的域添加到例外列表(如何将NSAppTransportSecurity添加到我的info.plist文件?)非常重要,请参阅此帖子以获取说明,否则您将收到传输权限错误.

    2023-01-11 21:28 回答
  • 发出API请求

    var request: NSURLRequest = NSURLRequest(URL: url)
    var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)
    

    准备回应

    声明一个数组如下

    var data: NSMutableData = NSMutableData()
    

    收到回复

    1.

    func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
       // Received a new request, clear out the data object
       self.data = NSMutableData()
    }
    

    2.

    func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
       // Append the received chunk of data to our data object
       self.data.appendData(data)
    }
    

    3.

    func connectionDidFinishLoading(connection: NSURLConnection!) {
       // Request complete, self.data should now hold the resulting info
       // Convert the retrieved data in to an object through JSON deserialization
       var err: NSError
       var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
    
       if jsonResult.count>0 && jsonResult["results"].count>0 {
          var results: NSArray = jsonResult["results"] as NSArray
          self.tableData = results
          self.appsTableView.reloadData()
    
       }
    }
    

    当NSURLConnection收到响应时,我们可以期望代表我们调用didReceiveResponse方法.此时,我们只需通过说self.data = NSMutableData()来重置数据,从而创建一个新的空数据对象.

    建立连接后,我们将开始在方法didReceiveData中接收数据.在这里传递的数据参数是我们所有丰富信息的来源.我们需要保留每个进入的块,因此我们将它附加到我们之前清除的self.data对象中.

    最后,当连接完成后,所有的数据已被接收,connectionDidFinishLoading叫我们准备在我们的应用程序使用的数据.万岁!

    这里的connectionDidFinishLoading方法使用NSJSONSerialization类从您的网址反序列化的结果,我们的原始数据转换成有用的Dictionary对象.

    2023-01-11 21:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有