ruby-on-rails - 处理可能更改的 json 响应(并非每次都包含所有键,可以添加新键)
问题描述
我在这里需要一些指示。
我正在与基于特定参数返回数据的 API 交谈。我一直在接受该响应并将其展平/编辑以适合我的模型,然后保存到数据库中。直到今天我开始测试实时端点(没有虚拟数据),一切都运行良好,事实证明,响应的格式发生了变化。
例如,如果数据集没有记录,而不是将值包含为 nil,则某些响应根本不包含该键。这打破了我展平和编辑的逻辑,因为现在我需要在做任何事情之前检查每个字段是否存在。
这是它的外观的 2 个片段
示例 1 -(不共享)
{
"request_info": {
"city_id": 76211,
"currency": "usd",
"req_type": "geom"
},
"data": {
"rental_counts": {
"counts": {
"private": {
"1": 17,
"2": 3,
"all": 20
},
"entire": {
"0": 2,
"1": 8,
"2": 11,
"3": 16,
"4": 14,
"5": 6,
"all": 57
}
},
}
}
}
示例 2(包括共享)
{
"request_info": {
"city_id": 76211,
"currency": "usd",
"req_type": "geom"
},
"data": {
"rental_counts": {
"counts": {
"private": {
"1": 17,
"2": 3,
"all": 20
},
"entire": {
"0": 2,
"1": 8,
"2": 11,
"3": 16,
"4": 14,
"5": 6,
"all": 57
},
"shared": {
"0": 2,
"1": 8,
"all": 10
}
},
}
}
}
我相信改变可以发生在任何级别和任何关键(父母或孩子)。我敢肯定我不是第一个遇到这种事情的人。管理它的最佳方法是什么?无论数据键是否存在,是否有一些方法或 gem 可以帮助解析 json 并将其转换为标准化模型?
我一直在看 Roar,但仍然不太明白它是如何运作的。这是 Roar 可以处理的事情,还是 json 对象需要预先定义而不是动态的?
解决方案
我找到了一个比咆哮或反序列化器更简单的解决方案。Ruby 的 slice 方法允许您只选择预定义的键并忽略所有其他键。我在展平哈希之后但在使用活动记录导入之前调用此方法。
推荐阅读
- google-apps-script - 隐藏特定用户的工作表的脚本?
- c# - 从目录中获取文件夹名称
- javascript - 使用 react native 时 pdf-lib 显示错误
- nginx - 我的自托管网站无法在未连接到我的网络的设备上加载
- flutter - 如何在 Hive List Flutter 上执行 .reduce
- python - 烧瓶中的 Matplotlib(谷歌 Colab)
- css - Sass 动画拼图:让环开始变胖,然后随着它们的扩展变细
- reactjs - 将数据传递给可以通过单击按钮进行切换的子组件
- python - DispatcherMiddleware 的问题 - 烧瓶 + dash 应用程序集成
- hololens - 你能从hololens导出整个空间图吗?