提问人:Jens Schmidt 提问时间:8/15/2022 更新时间:8/15/2022 访问量:43
Ruby on Rails:通过嵌套 API JSON 响应的最佳方式
Ruby on Rails: Best way to go trough a nested API JSON Response
问:
我正在尝试从更大/嵌套的 API JSON 响应中获取特定数据。但是因为它是高度动态的,所以它经常失败,因为 JSON 树中缺少一些分支。
有没有好的方法或一些最佳实践来获取数据?
例:
@myrecords.cvss31 = jsonresponse["result"]["CVE_Items"][0]["impact"]["baseMetricV3"]["cvssV3"]["vectorString"]
在这种情况下,有时会引发错误,因为“cvssV3”为零。也许将来“baseMetricV3”也可能为零。
因此,我的方法是为每个属性创建 7 个 if 语句。“if jsonresponse[”result“].present?...”, next: “if jsonresponse[”result“][”CVE_Items“].present?” 等等。但这似乎不对。
我也尝试过类似“..[“vectorString”].presence ||= “没有 NVD CVSS 3.1 分数”“,但由于缺少”vectorString“之前的属性,这似乎也不起作用。
我还有很多其他属性要从该 API 中提取。所以基本上我必须写成百上千个条件语句。
如果我不想从该 JSON 响应中提取所有数据,是否有更好的方法?
答:
1赞
Saqib Shahzad
8/15/2022
#1
把它放在这里给任何在这个问题上绊倒的人。通过使用 dig:
jsonresponse.dig("result", "CVE_Items", 0, "impact", "baseMetricV3", "cvssV3", "vectorString").presence || "no NVD CVSS 3.1 Score"
评论
jsonresponse.dig("result", "CVE_Items", 0, "impact", "baseMetricV3", "cvssV3", "vectorString").presence || "no NVD CVSS 3.1 Score"