【问题标题】:Filter Data in SwiftyJson在 SwiftyJson 中过滤数据
【发布时间】:2018-08-02 04:44:25
【问题描述】:

我有一个 SwiftyJson 对象。

我无法过滤该数组。我已经尝试过这个解决方案https://stackoverflow.com/a/37497170/4831567。但是我的 json 格式不同,这就是为什么不工作的原因。

[
    {
        "name": "19860",
        "header": {
            "start_time": "1519270200",
            "end_time": "1519299000",
            "state": "lunch"
        },
        "alerts": "1",
        "venue": {
            "location": "Delhi, India",
            "timezone": "+05:30"
        },
        "srs_category": [
            0,
            1
        ]
    },
    {
        "name": "19861",
        "header": {
            "start_time": "1519270200",
            "end_time": "1519299000",
            "state": "Dinner"
        },
        "alerts": "1",
        "venue": {
            "location": "Mumbai, India",
            "timezone": "+05:30"
        },
        "srs_category": [
            1,
            3
        ]
    },
    {
        "name": "19862",
        "header": {
            "start_time": "1519270200",
            "end_time": "1519299000",
            "state": "lunch"
        },
        "alerts": "1",
        "venue": {
            "location": "Surat, India",
            "timezone": "+05:30"
        },
        "srs_category": [
            0,
            2
        ]
    }
]

我想找到 srs_category 包含 1 的对象。我知道通过循环和条件是可能的。但我想通过 NSPredicate。如果可以的话,请帮帮我。

谢谢。

【问题讨论】:

    标签: ios json swift nspredicate swifty-json


    【解决方案1】:

    这里是使用 SwiftyJSON 的简单方法:

        let filtered = JSON(yourArray).arrayValue.filter({
            $0["srs_category"].arrayValue.map({ $0.intValue }).contains(1)
        })
    

    【讨论】:

      【解决方案2】:

      使用 Swift 原生函数而不是 NSPredicate

      data 表示从某处收到的Data 对象

      do {
          if let json = try JSONSerialization.jsonObject(with:data) as? [[String:Any]] {
              let srsCategory1 = json.first(where: { dict -> Bool in
                  guard let array = dict["srs_category"] as? [Int] else { return false }
                  return array.contains(1)
              })
              print(srsCategory1 ?? "not found")
          }
      } catch {
          print(error)
      }
      

      如果有多个符合条件的项目,请将first 替换为filter。那么结果就是一个非可选数组。

      【讨论】:

        猜你喜欢
        • 2016-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-27
        • 2021-06-07
        • 2014-08-05
        • 2010-10-03
        相关资源
        最近更新 更多