如何从json获取Dictionary并存储在另一个Dictionary中

时间:2015-05-26 11:10:17

标签: ios arrays swift nsdictionary

我正在尝试开发一个只有值数组的UIPickerView。所以我将有一个Dictionary(场所)来存储来自json的key和value以及一个只存储它的Array(venueValue)使用venueValue我可以在UIPickerView.But中显示结果,我想要用户从picker中选择的值的键。不幸的是,我想到如何从我的中获取Dictionary(key:value)和Array(key) json.Any Help?

var venue = [String:String]()
var venueValue = [String]()

var selectedValue : String? // to show in text box after picker selected and to get key of selected value from venue

func populateVenues(completion : (error: NSError?,value : [String]?,dict : [String:String]) -> Void){
    var request = NSMutableURLRequest(URL: NSURL(string: "http://localhost:8080/xxx/xxx/xxx")!)
    var session = NSURLSession.sharedSession()
    request.HTTPMethod = "POST"

    var err: NSError?

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        println("Auction : Request Completed")

        var err: NSError?

        if error == nil{
            var venues = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! NSDictionary

            for (k, v) in venues {

                if let value = v as? [String] {
                    println(value)
                    // Acutally value should start from "All Venue".I wonder why it start at "ZeroCentral",Please check my output.
                    self.venueValue.append(value[0])
                }
            }
            //I still dont get the dictionary yet.how to change NSDictionary to Dictionary
            // What i want is to store value in venueValue and to store both key and value in venue because when the picker can only store array.So i gonna get the selected value from picker and get the key of selected value from dictionary(venue)

            completion(error: nil,value: venueValue,dict:venues)
        }
        else{
            println(error.localizedDescription)
        }

        if(err != nil) {
            // If there is an error parsing JSON, print it to the console
            println("JSON Error \(err!.localizedDescription)")
        }

    })

    task.resume()
}

这是我的场地输出。

{
0 =     (
    "All Venues"
);
"100_152" =     (
    "ORIX Fukuoka"
);
"101_164" =     (
    "ORIX IP Stock"
);
"102_131" =     (
    "ORIX Kobe"
);
"103_135" =     (
    "ORIX Nagoya"
);
"104_132" =     (
    "ORIX Sendai"
);
"105_54" =     (
    "SAA Hamamatsu"
);
"106_29" =     (
    "SAA Sapporo"
);
"107_184" =     (
    Sakura
);
}

我尝试输出的venueValue没有像场地输出那样排序

[ORIX Nagoya]
[ORIX IP Stock]
[ORIX Kobe]
[All Venues]
[ORIX Fukuoka]
…...

为什么它不像旧的?如果我想从#34;所有场地开始",如何做到这一点?任何帮助?请我接近答案。

2 个答案:

答案 0 :(得分:0)

像这样创建两个数组。

var venueId = [String]()
var venueValue = [String]()

var selectedValue : String?

func populateVenues(completion : (error: NSError?,results : [String]?,keys : [String]) -> Void){
    var request = NSMutableURLRequest(URL: NSURL(string: "http://localhost:8080/xxx/xxx/xxx")!)
    var session = NSURLSession.sharedSession()
    request.HTTPMethod = "POST"

    var err: NSError?

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        println("Auction : Request Completed")

        var err: NSError?

        if error == nil{
            var venues = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! [String: AnyObject]

            for (k, v) in venues {

                println("key is : \(k).Value is : \(v)")
                // This is where I start having trouble.
                // I want to append k to venueId and v to venueValue
                venueId.append(k)
                if let value = v as? Array[String] {
                   venueValue.append(value[0])
                }
            }

            completion(error: nil,results: self.venueId,keys:self.venueValue!)
        }
        else{
            println(error.localizedDescription)
        }

        if(err != nil) {
            // If there is an error parsing JSON, print it to the console
            println("JSON Error \(err!.localizedDescription)")
        }

    })

    task.resume()
}

答案 1 :(得分:0)

从你的场地输出看起来,每个字典中的值都是一个包含1个元素的数组。

您需要提取该单个项目。

实际上,您需要将字典值转换为[String]类型,然后提取第一个元素。

看起来@ Aimit89设置了他的代码来处理你正在获得的数据。