Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:解析Json字符串并将信息填充到字典中_Json_Swift_Nsstring_Nsdictionary - Fatal编程技术网

Swift:解析Json字符串并将信息填充到字典中

Swift:解析Json字符串并将信息填充到字典中,json,swift,nsstring,nsdictionary,Json,Swift,Nsstring,Nsdictionary,我目前正在学习Swift中的web服务。我有这个网址,显示最近的地震和其他有关它的信息。底部的代码是我到目前为止的代码,一旦我运行它,它就会从URL以JSON格式记录一个字符串。下面是我从字符串中得到的3条记录。如何解析这个JSON字符串并取出ID、标题,然后将这些信息填充到字典中 html = [ { "response":1, "message":"OK", "count":50 }, { "id":1

我目前正在学习Swift中的web服务。我有这个网址,显示最近的地震和其他有关它的信息。底部的代码是我到目前为止的代码,一旦我运行它,它就会从URL以JSON格式记录一个字符串。下面是我从字符串中得到的3条记录。如何解析这个JSON字符串并取出ID、标题,然后将这些信息填充到字典中

html = 
[
    {
        "response":1,
        "message":"OK",
        "count":50
    },
    {
        "id":133813,
        "title":"M 1.4 - 8km NE of Desert Hot Springs, California",
        "link":"http://earthquake.usgs.gov/earthquakes/eventpage/ci37312936",
        "source":"http://www.kuakes.com",
        "north":34.02,
        "west":116.443001,
        "lat":34.019501,
        "lng":-116.442497,
        "depth":1,
        "mag":1.4,
        "time":"2015-02-04 23:41:06 UTC",
        "timestamp":1423093266
    },
    {
        "id":133814,
        "title":"M 1.3 - 9km NE of Desert Hot Springs, California",
        "link":"http://earthquake.usgs.gov/earthquakes/eventpage/ci37312920",
        "source":"http://www.kuakes.com",
        "north":34.021,
        "west":116.441002,
        "lat":34.020832,
        "lng":-116.440666,
        "depth":1,
        "mag":1.3,
        "time":"2015-02-04 23:40:26 UTC",
        "timestamp":1423093226
    },
    {
        "id":133815,
        "title":"M 1.1 - 3km SW of Houston, Alaska",
        "link":"http://earthquake.usgs.gov/earthquakes/eventpage/ak11502658",
        "source":"http://www.kuakes.com",
        "north":61.604,
        "west":149.867004,
        "lat":61.6035,
        "lng":-149.866806,
        "depth":48,
        "mag":1.1,
        "time":"2015-02-04 23:38:42 UTC",
        "timestamp":1423093122
    }
代码

override func viewDidLoad() {
    super.viewDidLoad()

    let httpMethod = "GET"

    /* We have a 15-second timeout for our connection */
    let timeout = 15

    var urlAsString = "http://www.kuakes.com/json/"


    let url = NSURL(string: urlAsString)

    /* Set the timeout on our request here */
    let urlRequest = NSMutableURLRequest(URL: url,
        cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData,
        timeoutInterval: 15.0)

    urlRequest.HTTPMethod = httpMethod

    let queue = NSOperationQueue()

    NSURLConnection.sendAsynchronousRequest(urlRequest,
        queue: queue,
        completionHandler: {(response: NSURLResponse!,
            data: NSData!,
            error: NSError!) in

            if data.length > 0 && error == nil{
                let html = NSString(data: data, encoding: NSUTF8StringEncoding)
                println("html = \(html)")
            } else if data.length == 0 && error == nil{
                println("Nothing was downloaded")
            } else if error != nil{
                println("Error happened = \(error)")
            }

        }
    )

}
}

您可以使用与下面类似的方法提取那些“id”和“title”键值。在本例行程序结束时,所有数据都位于字典数组中,
newArrayofDicts

if data.length > 0 && error == nil{
    let html = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("html = \(html)")

    var newArrayofDicts : NSMutableArray = NSMutableArray()
    var arrayOfDicts : NSMutableArray? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error:nil) as? NSMutableArray
    if arrayOfDicts != nil {
        for item in arrayOfDicts! {
            if var dict  = item as? NSMutableDictionary{
                var newDict : NSMutableDictionary = NSMutableDictionary()
                if dict["title"] != nil && dict["id"] != nil{
                    newDict["title"] = dict["title"]
                    newDict["id"] = dict["id"]
                    newArrayofDicts.addObject(newDict)
                }
            }
        }
    }
}
基本上,您只需使用
NSJSONSerialization.JSONObjectWithData
生成一个字典数组,然后跳入数组中的每个字典,并使用“id”键值和“title”键对创建一个新的dict。每一本字典你都可以保存在某个地方。在下面的代码片段中,我将它们保存到
newArrayofDicts

if data.length > 0 && error == nil{
    let html = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("html = \(html)")

    var newArrayofDicts : NSMutableArray = NSMutableArray()
    var arrayOfDicts : NSMutableArray? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error:nil) as? NSMutableArray
    if arrayOfDicts != nil {
        for item in arrayOfDicts! {
            if var dict  = item as? NSMutableDictionary{
                var newDict : NSMutableDictionary = NSMutableDictionary()
                if dict["title"] != nil && dict["id"] != nil{
                    newDict["title"] = dict["title"]
                    newDict["id"] = dict["id"]
                    newArrayofDicts.addObject(newDict)
                }
            }
        }
    }
}
也许有一种更时髦的方式来解决这个问题;但我想不起来;)它也可以变得更简洁,但我觉得它让人明白了这个想法。此外,上面代码段中创建的大多数对象都是可变的。在你的情况下,这可能没有必要。您可能需要根据需要进行调整。希望这能合理地回答您的问题。

您可以使用类似于下面内容的方法提取那些“id”和“title”键值。在本例行程序结束时,所有数据都位于字典数组中,
newArrayofDicts

if data.length > 0 && error == nil{
    let html = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("html = \(html)")

    var newArrayofDicts : NSMutableArray = NSMutableArray()
    var arrayOfDicts : NSMutableArray? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error:nil) as? NSMutableArray
    if arrayOfDicts != nil {
        for item in arrayOfDicts! {
            if var dict  = item as? NSMutableDictionary{
                var newDict : NSMutableDictionary = NSMutableDictionary()
                if dict["title"] != nil && dict["id"] != nil{
                    newDict["title"] = dict["title"]
                    newDict["id"] = dict["id"]
                    newArrayofDicts.addObject(newDict)
                }
            }
        }
    }
}
基本上,您只需使用
NSJSONSerialization.JSONObjectWithData
生成一个字典数组,然后跳入数组中的每个字典,并使用“id”键值和“title”键对创建一个新的dict。每一本字典你都可以保存在某个地方。在下面的代码片段中,我将它们保存到
newArrayofDicts

if data.length > 0 && error == nil{
    let html = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("html = \(html)")

    var newArrayofDicts : NSMutableArray = NSMutableArray()
    var arrayOfDicts : NSMutableArray? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error:nil) as? NSMutableArray
    if arrayOfDicts != nil {
        for item in arrayOfDicts! {
            if var dict  = item as? NSMutableDictionary{
                var newDict : NSMutableDictionary = NSMutableDictionary()
                if dict["title"] != nil && dict["id"] != nil{
                    newDict["title"] = dict["title"]
                    newDict["id"] = dict["id"]
                    newArrayofDicts.addObject(newDict)
                }
            }
        }
    }
}
也许有一种更时髦的方式来解决这个问题;但我想不起来;)它也可以变得更简洁,但我觉得它让人明白了这个想法。此外,上面代码段中创建的大多数对象都是可变的。在你的情况下,这可能没有必要。您可能需要根据需要进行调整。希望这能合理地回答您的问题。

您可以使用类似于下面内容的方法提取那些“id”和“title”键值。在本例行程序结束时,所有数据都位于字典数组中,
newArrayofDicts

if data.length > 0 && error == nil{
    let html = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("html = \(html)")

    var newArrayofDicts : NSMutableArray = NSMutableArray()
    var arrayOfDicts : NSMutableArray? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error:nil) as? NSMutableArray
    if arrayOfDicts != nil {
        for item in arrayOfDicts! {
            if var dict  = item as? NSMutableDictionary{
                var newDict : NSMutableDictionary = NSMutableDictionary()
                if dict["title"] != nil && dict["id"] != nil{
                    newDict["title"] = dict["title"]
                    newDict["id"] = dict["id"]
                    newArrayofDicts.addObject(newDict)
                }
            }
        }
    }
}
基本上,您只需使用
NSJSONSerialization.JSONObjectWithData
生成一个字典数组,然后跳入数组中的每个字典,并使用“id”键值和“title”键对创建一个新的dict。每一本字典你都可以保存在某个地方。在下面的代码片段中,我将它们保存到
newArrayofDicts

if data.length > 0 && error == nil{
    let html = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("html = \(html)")

    var newArrayofDicts : NSMutableArray = NSMutableArray()
    var arrayOfDicts : NSMutableArray? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error:nil) as? NSMutableArray
    if arrayOfDicts != nil {
        for item in arrayOfDicts! {
            if var dict  = item as? NSMutableDictionary{
                var newDict : NSMutableDictionary = NSMutableDictionary()
                if dict["title"] != nil && dict["id"] != nil{
                    newDict["title"] = dict["title"]
                    newDict["id"] = dict["id"]
                    newArrayofDicts.addObject(newDict)
                }
            }
        }
    }
}
也许有一种更时髦的方式来解决这个问题;但我想不起来;)它也可以变得更简洁,但我觉得它让人明白了这个想法。此外,上面代码段中创建的大多数对象都是可变的。在你的情况下,这可能没有必要。您可能需要根据需要进行调整。希望这能合理地回答您的问题。

您可以使用类似于下面内容的方法提取那些“id”和“title”键值。在本例行程序结束时,所有数据都位于字典数组中,
newArrayofDicts

if data.length > 0 && error == nil{
    let html = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("html = \(html)")

    var newArrayofDicts : NSMutableArray = NSMutableArray()
    var arrayOfDicts : NSMutableArray? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error:nil) as? NSMutableArray
    if arrayOfDicts != nil {
        for item in arrayOfDicts! {
            if var dict  = item as? NSMutableDictionary{
                var newDict : NSMutableDictionary = NSMutableDictionary()
                if dict["title"] != nil && dict["id"] != nil{
                    newDict["title"] = dict["title"]
                    newDict["id"] = dict["id"]
                    newArrayofDicts.addObject(newDict)
                }
            }
        }
    }
}
基本上,您只需使用
NSJSONSerialization.JSONObjectWithData
生成一个字典数组,然后跳入数组中的每个字典,并使用“id”键值和“title”键对创建一个新的dict。每一本字典你都可以保存在某个地方。在下面的代码片段中,我将它们保存到
newArrayofDicts

if data.length > 0 && error == nil{
    let html = NSString(data: data, encoding: NSUTF8StringEncoding)
    println("html = \(html)")

    var newArrayofDicts : NSMutableArray = NSMutableArray()
    var arrayOfDicts : NSMutableArray? = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error:nil) as? NSMutableArray
    if arrayOfDicts != nil {
        for item in arrayOfDicts! {
            if var dict  = item as? NSMutableDictionary{
                var newDict : NSMutableDictionary = NSMutableDictionary()
                if dict["title"] != nil && dict["id"] != nil{
                    newDict["title"] = dict["title"]
                    newDict["id"] = dict["id"]
                    newArrayofDicts.addObject(newDict)
                }
            }
        }
    }
}

也许有一种更时髦的方式来解决这个问题;但我想不起来;)它也可以变得更简洁,但我觉得它让人明白了这个想法。此外,上面代码段中创建的大多数对象都是可变的。在你的情况下,这可能没有必要。您可能需要根据需要进行调整。希望这能合理地回答您的问题。

访问json.org并学习json语法。学习只需要5-10分钟。请访问json.org学习json语法。学习只需要5-10分钟。请访问json.org学习json语法。学习只需要5-10分钟。请访问json.org学习json语法。学习只需要5-10分钟。