我很难弄清楚如何组合相似的 json 结果,以便在搜索 API 时,搜索结果只显示一次特定的药物名称。我也遇到了同样的力量问题。选择药品时,由于药品包装码不同(需要根据药品包装码来判断),所以多行填写相同的强度。有任何想法吗?我不确定我是否应该以不同的方式解析它。
这是 playground 中的 JSON 示例:
let json = """
{
"meta": {
"total": 406
},
"drugs": [
{
"id": "12547-0204",
"active_ingredient_strength": "10mg",
"proprietary_name": "Zyrtec",
"non_proprietary_name": "Zyrtec"
"drug_package_ids": [
"12547-0204-30",
"12547-0204-32",
"12547-0204-36"
]
},
{
"id": "52959-0482",
"active_ingredient_strength": "10mg",
"proprietary_name": "Zyrtec",
"non_proprietary_name": "Zyrtec"
"drug_package_ids": [
"52959-0482-01",
"52959-0482-07",
"52959-0482-10",
"52959-0482-15",
"52959-0482-30"
]
},
{
"id": "54868-5879",
"active_ingredient_strength": "5; 120mg/1; mg/1",
"proprietary_name": "ZYRTEC",
"non_proprietary_name": "Cetirizine Hydrochloride and Pseudoephedrine
Hydrochloride",
"drug_package_ids": [
"54868-5879-0",
"54868-5879-00",
"54868-5879-00"
]
}
]
}""".data(using: .utf8)!
struct DrugSearchResponse: Codable {
let meta: Meta
let drugs: [Drugs]
struct Meta: Codable {
let total: Int
}
struct Drugs: Codable {
let id: String
let active_ingredient_strength: String
let proprietary_name: String
let non_proprietary_name: String
}
}
let decoder = JSONDecoder()
let results = try! decoder.decode(DrugSearchResponse.self, from: json)
let drugs = results.drugs
for name in drugs {
print(name.proprietary_name)
}
下面是搜索结果的截图以供引用:
最佳答案
您可以过滤自定义数组的内容,并根据任何属性删除重复值项。
例如这将删除除第一个以外的所有具有相同专有名称的药物
let result: [Drugs] = []
result.append(contentsOf: results.drugs.filter { item in
!result.contains(where: { $0.proprietary_name == item.proprietary_name })
})
关于json - 使用 Decodable 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315477/