Swift 3 中解析 JSON

Xcode 8 和 Swift 3id 现在作为 Any 引入而不是 AnyObject

这表示 JSONSerialization.jsonObject(with: data) 返回 Any。所以需要把 json data 转换为特定类型,比如[String:Any]。json 接下来的字段也需要这么做。

var jsonString = "{" +
    "\"Language\": {" +
    "\"Field\":[" +
    "{" +
    "\"Number\":\"976\"," +
    "\"Name\":\"Test1\"" +
    "}," +
    "{" +
    "\"Number\":\"977\"," +
    "\"Name\":\"Test2\"" +
    "}" +
    "]" +
    "}" +
"}"

var data = jsonString.data(using: .utf8)!
if let parsedData = try? JSONSerialization.jsonObject(with: data) as! [String:Any] {
    let language = parsedData["Language"] as! [String:Any]
    print(language)
    let field = language["Field"] as! [[String:Any]]
    let name = field[0]["Name"]!
    print(name) // ==> Test1
}

实际中你应该想要 json 深处特定的字段。就假设是 Field 数组的第一个元素 Name 字段。可以用一串展开来安全的访问字段,就像这样:

var data = jsonString.data(using: .utf8)!
if let json = try? JSONSerialization.jsonObject(with: data) as? [String:Any],
    let language = json?["Language"] as? [String:Any],
    let field = language["Field"] as? [[String:Any]],
    let name = field[0]["Name"] as? String, field.count > 0 {
    print(name) // ==> Test1
} else {
    print("bad json - do some recovery")
}

参考:苹果Swift 博客 Working with JSON in Swift

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,143评论 0 13
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 10,028评论 0 12
  • 六段有效演讲可以运用在工作和生活中的各个方面,吴广成老师分享了六段在职场中的运用。 开头以非常有画面感...
    元宝Daddy阅读 884评论 0 0
  • 岁月不居,时节如流。转眼间,2019号岁月列车已飞逝而过,2020号岁月列车正飞驶而来。 岁末年初,正是整理心情的...
    子诺不离阅读 4,635评论 5 15
  • 岁月静好 此时此刻 若你在… 该多好 此时此刻 远方的 你 还好吗? 想你… -思你如故
    木偶人木阅读 2,463评论 0 0