【问题标题】:how to pick data by key from dictionary array?如何从字典数组中按键选择数据?
【发布时间】:2017-02-24 13:39:42
【问题描述】:

我尝试通过键从数组字典中选择数据。
我可以做到索引号。
但这是我的字典 [[String : AnyObject]] 什么是 key 存储每个元素时i 从 json 反序列化到字典。
因为字典集 key value 对并且字典中的每个值都与一个 唯一键 相关联。

这是我的 Json:

{
  "photos":  {
    "page": 1,
    "pages": 1,
    "perpage": 500,
    "total": 36,
    "photo":  [
       {
        "id": "9671201784",
        "owner": "34507951@N07",
        "secret": "fb55a848bc",
        "server": "5494",
        "farm": 6,
        "title": "Burning Man 2013",
        "ispublic": 1,
        "isfriend": 0,
        "isfamily": 0,
        "url_m": "https://farm6.staticflickr.com/5494/9671201784_fb55a848bc.jpg",
        "height_m": "333",
        "width_m": "500",
        "is_primary": 1,
        "has_comment": 0
      },
       {
        "id": "16553346708",
        "owner": "116399434@N04",
        "secret": "092f304f0e",
        "server": "7630",
        "farm": 8,
        "title": "Burning Man",
        "ispublic": 1,
        "isfriend": 0,
        "isfamily": 0,
        "url_m": "https://farm8.staticflickr.com/7630/16553346708_092f304f0e.jpg",
        "height_m": "244",
        "width_m": "500",
        "is_primary": 0,
        "has_comment": 0
      }],
 "stat": "ok"
}

反序列化快速代码;

if let photos = parsedResult[Constants.FlickerResponseKeys.Photos] as?[String : AnyObject ]{

    //  print(photos[Constants.FlickerResponseKeys.Photo])
    if let photo = photos[Constants.FlickerResponseKeys.Photo] as? [[String : AnyObject]] {
        print(photo[0])                    
    }
}

【问题讨论】:

    标签: json swift dictionary


    【解决方案1】:

    把这张照片放在里面

    for (key, value) in photo {
     print(key)
     print(value)
    }
    

    【讨论】:

    • 兄弟,我了解照片,但.. 如何管理 [[String : AnyObject]] 。其中 AnyObject 表示每个对象,但关键是什么?...我想为每个梨找到每个字符串键
    • 检查我的编辑这应该给你StringValue
    • 不,它不工作.. 应该抛出“表达式类型 '[[String : AnyObject]]' 在没有更多上下文的情况下是模棱两可的”错误
    【解决方案2】:

    您可以轻松地将您的 JSON 映射到 ObjectMapper。创建一个新的swift文件并输入以下代码,

    import UIKit
    import ObjectMapper
    
    
    class Photos: Mappable  {
    
    var page : Int
    var pages : Int
    var perpage : Int
    var total : Int
    
    var photo : [MyPhoto]
    
    required init?(_ map: Map) {
    
        page = 0
        pages = 0
        perpage = 0
        total = 0
    
        photo = []
    }
    
    func mapping(map: Map) {
    
        page                    <- map["photos.page"]
        pages                   <- map["photos.pages"]
        perpage                 <- map["photos.perpage"]
        total                   <- map["photos.total"]
    
        photo                   <- map["photos.photo"]
      }
    }
    
    
    class MyPhoto: Mappable {
    
    var id : String
    var owner : String
    var secret : String
    .
    .
    .
    
    required init?(_ map: Map) {
    
        id = ""
        owner = ""
        secret = ""
    }
    
    func mapping(map: Map) {
    
        id                          <- map["id"]
        owner                       <- map["owner"]
        secret                      <- map["secret"]
    
    }
    }
    

    这就是你将如何使用它。

    if let data = Mapper<Photos>().map(result){
        print(data.perpage)
        print(data.photo.count)
        // do something with your data
    }
    

    如果您发现任何困难,请告诉我。

    【讨论】:

    • 谢谢。但我很快就来了。我对你的代码一无所知。
    • 新手没问题。转到 ObjectMapper 的链接并使用 cocoaPods 安装它,然后按照我的回答。如果您卡在某个地方,请告诉我。
    • 我不推荐手动映射 JSON,因为。如果在任何时候键更改或从 json 中删除键,您的应用程序可能会崩溃。
    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    相关资源
    最近更新 更多