【问题标题】:How do I get Dictionary from json and store in the another Dictionary如何从 json 获取字典并存储在另一个字典中
【发布时间】:2015-05-26 11:10:17
【问题描述】:

我正在尝试开发一个 UIPickerView,其中只有值数组。所以我将有一个 Dictionary(venue) 来存储 json 中的键和值,还有一个 Array(venueValue) 只存储值。通过使用venueValue,我可以在UIPickerView 中显示结果。但是,我想要用户从picker 中选择的值的键。不幸的是,我正在考虑如何从我的json 中获取Dictionary(key:value) 和Array(key)。有什么帮助吗?

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
);
}

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

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

为什么它不像旧的?如果我想从“所有场地”开始,怎么做?任何帮助?请我如此接近答案。

【问题讨论】:

    标签: ios arrays swift nsdictionary


    【解决方案1】:

    像这样创建两个数组。

    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()
    }
    

    【讨论】:

    • 我不能。它一直向我显示这些。puu.sh/i13Kw/eed348c2a6.png.When 我解决了这个问题,它显示“无法将类型 '__NSArrayM' (0x10728a448) 的值转换为 'NSString' (0x10795c8e0)。”在输出中
    • ,对不起,这是我的工作完成时间,所以我必须回到家。当我按照你说的输入时仍然有错误,puu.sh/i1VVU/11347351d3.png.Thanks寻求你的帮助。还没有解决。 :(
    • 我现在得到了场地值。但我无法将场地(NSDictionary)存储到场地[字符串:字符串]()。而且我的场地值输出没有像场地输出那样排序。请帮助
    【解决方案2】:

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

    您需要提取该单个项目。

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

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

    【讨论】:

    • 我现在得到了场地值。但我不能将场地(NSDictionary)存储到场地[String:String]()。而且我的场地值输出没有像场地输出那样排序。请帮助。我是这样接近我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2021-09-03
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多