json - 使用 Decodable 解析 JSON

标签 json swift parsing decodable

我很难弄清楚如何组合相似的 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/

相关文章:

android - JSON数据到android应用程序

python - 我们如何从字典列表的字典创建数据框

c# - 当发生错误时,我们如何从ServiceStack的JSON Serializer访问数据?

ios - 在 iOS 中使用模态视图 Controller 的返回值

Python - NLP - 将 iter(iter(tree)) 转换为 list(tree)

javascript - 使用YouTube和非YouTube链接解析正则表达式URL

c++ - 如何使用 nlohmann json 在 C++ 中将相同的关键 json 数据合并为一个

ios - 将参数传递给我的方法时出现“调用中的额外参数”

ios - 自定义 BarButtonItem 项目 : Add red dot on top right corner, Swift 4 IOS

php - PHP解析/语法错误;以及如何解决它们