如何过滤嵌套的 SwiftyJSON 数组
How to filter a nested SwiftyJSON array
我有一个嵌套了多个级别的 SwiftyJSON
数组,我需要根据最低级别的值过滤数组。下面是一个数组的例子。我需要在 Active == true
上过滤它。最有效的方法是什么?
var colors = JSON([
"Apple" : [
"Yellow" : [
"Active" : true,
"Working" : true,
"Value" : 0
],
"Red" : [
"Active" : false,
"Working" : true,
"Value" : 0
]
],
"Banana" : [
"Blue" : [
"Active" : false,
"Working" : true,
"Value" : 0
],
"Green" : [
"Active" : true,
"Working" : true,
"Value" : 0
]
]
])
期望的输出:
"Apple" : [
"Yellow" : [
"Active" : true,
"Working" : true,
"Value" : 0
]
],
"Banana" : [
"Green" : [
"Active" : true,
"Working" : true,
"Value" : 0
]
]
您可以创建一个循环来读取所有颜色,并在该循环内创建一个循环来读取第二个数组中的其他项目。第二个是检查项目是否有效并将其保存在另一个数组中
let activeItems = []
for item in colors {
for i in item as NSDictionary {
if i.objectForKey("Active") == true {
activeItems.addObject(i)
}
}
}
var result = [String:[String:JSON]]()
for (key, json) in colors.dictionaryValue {
let filtered = json.dictionaryValue.filter{[=10=].1["Active"].boolValue}
guard filtered.count > 0 else { continue }
var subDic = [String:JSON]()
filtered.forEach{subDic[[=10=].0] = [=10=].1}
result[key] = subDic
}
print(result)
看看这个
var filteredArray = [JSON]()
for item in colors {
for subItem in item.1 {
if subItem.1["Active"].boolValue {
filteredArray.append(JSON([item.0:JSON([subItem.0:subItem.1])]))
}
}
}
print(filteredArray)
输出是过滤子字典的字典数组,Active 为真:
[{
"Apple" : {
"Yellow" : {
"Working" : true,
"Value" : 0,
"Active" : true
}
}
}, {
"Banana" : {
"Green" : {
"Working" : true,
"Value" : 0,
"Active" : true
}
}
}]
我有一个嵌套了多个级别的 SwiftyJSON
数组,我需要根据最低级别的值过滤数组。下面是一个数组的例子。我需要在 Active == true
上过滤它。最有效的方法是什么?
var colors = JSON([
"Apple" : [
"Yellow" : [
"Active" : true,
"Working" : true,
"Value" : 0
],
"Red" : [
"Active" : false,
"Working" : true,
"Value" : 0
]
],
"Banana" : [
"Blue" : [
"Active" : false,
"Working" : true,
"Value" : 0
],
"Green" : [
"Active" : true,
"Working" : true,
"Value" : 0
]
]
])
期望的输出:
"Apple" : [
"Yellow" : [
"Active" : true,
"Working" : true,
"Value" : 0
]
],
"Banana" : [
"Green" : [
"Active" : true,
"Working" : true,
"Value" : 0
]
]
您可以创建一个循环来读取所有颜色,并在该循环内创建一个循环来读取第二个数组中的其他项目。第二个是检查项目是否有效并将其保存在另一个数组中
let activeItems = []
for item in colors {
for i in item as NSDictionary {
if i.objectForKey("Active") == true {
activeItems.addObject(i)
}
}
}
var result = [String:[String:JSON]]()
for (key, json) in colors.dictionaryValue {
let filtered = json.dictionaryValue.filter{[=10=].1["Active"].boolValue}
guard filtered.count > 0 else { continue }
var subDic = [String:JSON]()
filtered.forEach{subDic[[=10=].0] = [=10=].1}
result[key] = subDic
}
print(result)
看看这个
var filteredArray = [JSON]()
for item in colors {
for subItem in item.1 {
if subItem.1["Active"].boolValue {
filteredArray.append(JSON([item.0:JSON([subItem.0:subItem.1])]))
}
}
}
print(filteredArray)
输出是过滤子字典的字典数组,Active 为真:
[{
"Apple" : {
"Yellow" : {
"Working" : true,
"Value" : 0,
"Active" : true
}
}
}, {
"Banana" : {
"Green" : {
"Working" : true,
"Value" : 0,
"Active" : true
}
}
}]