【问题标题】:Swift Parsing JSON快速解析 JSON
【发布时间】:2014-07-29 16:36:16
【问题描述】:

我能够获取 JSON 数据,因为我可以看到它正在使用 println 打印出来。我还可以打印一些单独的键。但是我很难将其转换为字符串。

var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options:     NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
    println(jsonResult.count) // works
    numberOfStations.text = String(jsonResult.count)
    //latitude.text = jsonResult["latitude"] as String
    //var result: String = jsonResult["latitude"] as String
    let latitudeData : AnyObject? = jsonResult["latitude"]
    let longitudeData: AnyObject? = jsonResult["longitude"]

latitude.text = latitudeData as NSString!   // Doesn't work
longitude.text = longitudeData as NSString! // Doesn't work
println("latitude --> \(latitudeData)")    // Works  prints it ok latitude ---> 40.30303
println("longitude --> \(longitudeData)")  //Works   prints it ok longitude ---> 37.20202

类似这样的JSON

{
latitude: 34.0522342,
longitude: -118.2436849,
station_counts: {
 total: 247,
 fuels: {
     E85: {
       total: 0
   },
   ELEC: {
     total: 225,
     stations: {
       total: 55
     }
   },
 }
}

【问题讨论】:

    标签: json swift


    【解决方案1】:

    您的代码试图通过简单地将值转换为字符串来转换它们。相反,您需要使用返回值的字符串表示形式的方法。例如:

    latitude.text = latitudeData!.description
    

    【讨论】:

    • 嗨 Kaelin,感谢您的洞察力,所以我必须创建一个名为 description 的方法来返回字符串表示形式?在 Java 等语言中,您只需调用 toString() ....
    • 有一个名为 description 的只读属性用于 Swift / Objective-C 的此目的。 (抱歉,我错误地添加了函数调用括号,这对于访问属性是不正确的。我已经编辑了我的答案来解决这个问题。)
    • 谢谢!你是个天才!为什么我在 swift 文档中错过了这个? :)
    【解决方案2】:

    我不建议依赖 description() 来解析 json。这就是我在 Swift (beta 4) 中解析 json 的方式

                //parse Episode Name
                if let jsonAsDict = responseObject as? Dictionary<String, AnyObject>
                {
                    if let array: AnyObject = jsonAsDict["episodes"]
                    {
                        for item: AnyObject in array as [AnyObject]
                        {
                            //put episode name into array
                            self.episodeNames.append(item["name"] as String)
                        }
                    }
                }
    

    json 格式如下:

                episodes: [
                    {
                        name: "Episode Name 1"
                    },
                    {
                        name: "Episode Name2"
                    }
                ]
    

    self.episodeNames 在本例中被声明为 'var episodeNames: [String]'

    【讨论】:

    • 我对您的回答 WorkingDev 投了赞成票,因为它帮助我更深入地研究了 JSON 树。 :)
    【解决方案3】:

    您可能想看看SwiftyJSON,这是 GitHub 上的一个开源库,它使 Swift 中的 JSON 处理变得非常好。

    【讨论】:

    • 嗨,我真的试过了,它使 Xcode 不稳定......什么给了?我所做的是创建了一个新的 swift 文件,然后复制了代码。
    • 您可以将SwiftyJSON.swift 拖入您的项目,这可能与您进行复制/粘贴的效果相同。可能你复制了一些奇怪的字符,直接用文件试试。
    • 是的,我又试了一次,由于某种原因导致 sourcekitservice 不稳定并被终止...
    • 嗯,也许它还没有更新到 beta 4 :(
    猜你喜欢
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多