我有 JSON 資料,我試圖只抓取包括年齡在內的單詞。然后我計劃抓取所有 21 歲以上的年齡。我已經將字串中的每個單詞作為一個單獨的字串分開,但我看不到找到遍歷每個年齡的方法。
let JSON = """
{"data":"key=IAfpK, age=58, key=WNVdi, age=4, key=jp9zt, age=47, key=0Sr4C, age=68, key=CGEqo, age=76"}
"""
struct DataObject: Decodable {
let data: String
}
func grabAges() {
let jsonData = JSON.data(using: .utf8)!
let dataObject: DataObject = try! JSONDecoder().decode(DataObject.self, from: jsonData)
var arr = dataObject.data.components(separatedBy: ",")
//print(dataObject.data)
}
uj5u.com熱心網友回復:
正則運算式可以做得很好,不需要拆分字串。
該模式"\bage=(\d )"搜索字串age=(在單詞的開頭)后跟一個或多個數字并捕獲數字部分。
您可以將compactMap搜索結果映射(和過濾)到Int值
let json = """
{"data":"key=IAfpK, age=58, key=WNVdi, age=4, key=jp9zt, age=47, key=0Sr4C, age=68, key=CGEqo, age=76"}
"""
struct DataObject: Decodable {
let data: String
}
func grabAges() {
let jsonData = json.data(using: .utf8)!
let dataObject = try! JSONDecoder().decode(DataObject.self, from: jsonData)
let data = dataObject.data
let regex = try! NSRegularExpression(pattern: #"\bage=(\d )"#)
let ages = regex.matches(in: data, range: NSRange(data.startIndex..., in: data))
.compactMap { match -> Int? in
guard let range = Range(match.range(at: 1), in: data),
let age = Int(data[range]), age > 21 else { return nil }
return age
}
print(ages)
}
grabAges()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/476585.html
下一篇:我可以快速設定函式的執行順序嗎?
