ios - 快速解析嵌套的 JSON 属性

标签 ios json swift

遇到的麻烦可能很小,但我的搜索没有发现任何结果。我有一个 json 模型如下:

//快速语法让您了解模型

{user:
  {"name": "",
   "password": "",
   "medium" : {
      {"title":"",
      {"description":""}}}

我从对用户的 GET 请求中获取上述数据模型,它返回上面的所有信息,但是当我尝试解析“中等”信息(例如“标题”和“描述”)时,我没有运气。我在 Xcode 中得到了这样的回复

“对象‘AnyObject’的值未解包,您是想使用 ! 还是 ?”

然后当我单击圆形红色 Xcode 消息来修复它时,它会到处放置 !s 和 ?s 但错误仍然存​​在。这是我的解析方法,当我仅从“媒介”解析时,该方法工作得非常好。知道我做错了什么吗?

解析方法的一部分,我对每个属性都得到相同的错误: 所有具有相同错误的行由 * 指示

// Parse JSON data
            let jsonMedium = jsonResult?["user"] as! [AnyObject] //media where user is
            for jsonMedia in jsonMedium {
                let media = Media()
                *media.title = jsonMedia["medium"]["title"] as! String
                *media.description = jsonMedia["medium"]["description"] as! String
                *media.category = jsonMedia["medium"]["category"] as! String
                *media.image = jsonMedia["medium"]["image"] as! String

                *if let IDer = jsonMedia["medium"]["id"] as? Int{
                        var stringIder = String(IDer)
                        media.identifierString = stringIder

                }

仍然没有任何运气。我不明白为什么它适用于常规 JSON,但当我尝试获取嵌套时 Xcode 不会接受任何内容。感谢您的所有帮助。同时,如果它有进一步帮助的话,这是完整的方法

func parseJsonData(data: NSData) -> [Media] {
        var medium = [Media]()
        do {
            let jsonResult = try NSJSONSerialization.JSONObjectWithData(data,
                                                                        options: NSJSONReadingOptions.MutableContainers) as? NSDictionary
            // Parse JSON data
            let jsonMedium = jsonResult?["media"] as! [AnyObject]
            for jsonMedia in jsonMedium {
                let media = Media()
                media.title = jsonMedia["medium"]["title"] as! String
                media.description = jsonMedia["medium"]["description"] as! String
                media.category = jsonMedia["medium"]["category"] as! String
                media.image = jsonMedia["medium"]["image"] as! String

                if let IDer = jsonMedia["medium"]["id"] as? Int{
                        var stringIder = String(IDer)
                        media.identifierString = stringIder

                }


                medium.append(media)
            }
        } catch {
            print(error)
        }
        return medium
    }

最佳答案

let json = [
    "user" : [
        "name" : "My Name",
        "password" : "My Password",
        "medium" : [
            "title" : "My Title",
            "description" : "My Description"
        ]
    ]
]

if let userJson = json["user"] as? [String : AnyObject] {
    if let name = userJson["name"] as? String {
        print("name: \(name)")
    }
    if let password = userJson["password"] as? String {
        print("password: \(password)")
    }
    if let mediumJson = userJson["medium"] as? [String : AnyObject] {
        if let title = mediumJson["title"] as? String {
            print("title: \(title)")
        }
        if let description = mediumJson["description"] as? String {
            print("description: \(description)")
        }
    }
}

关于ios - 快速解析嵌套的 JSON 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37076014/

相关文章:

ios - 如何获取所有字典键('LazyMapCollection<..>'错误)

ios - 使用 setEditing 不会使 tableview 进入编辑模式

ios - 如何渲染 CALayerGradient 二次曲线?

ios - C 与 Swift 的互操作性

ios - Sprite Kit,灰色背景而不是图像

值为对象数组的对象的 JSON 模式

python - Pandas Dataframe 中的数组

java - 将 POJO 作为值的 HashMap 转换为 JSON 字符串

ios - 如何使我的表格 View 看起来更像 iOS 设置应用程序中的表格 View ?

ios - 单元测试错误抛出在 block 中