提问人:DariusP 提问时间:11/6/2023 更新时间:11/6/2023 访问量:41
如何在Rails中反序列化非标准的JSON请求?(非 JSONAPI)
How to deserialize a non standard JSON request in Rails? (non-JSONAPI)
问:
在 Rails 应用程序中,我收到一个跟踪模型的 JSON 请求。我需要将所有这些保存到数据库中。
我不确定如何处理控制器的此输入。Order
JSON 请求正文采用以下格式:
{
"OrderID": "00023-00001",
"OrderType": "Delivery",
"DateTimes": {
"DeliverDueDateTime": "2024/03/17 20:00:00"
},
"Area": {
"Code": {
"ZipCode": "1111",
"AdditionalCodes": {
"ZipCode": [
"2111",
"3111"
]
}
}
}
}
这与我习惯的格式不同(对这个框架来说仍然是新的)。
我发现的大多数教程都使用蛇形大小写的 JSON 键,在根目录中有 or,并且不包含嵌套数据。通常,我会这样做.但这里有点不同。order
data
params.require(:order).permit(:request_number, ...)
此 JSON 不同,因为:
- 它有嵌套键
- 根目录下没有任何内容
- 有 Pascal 大小写键
我应该如何处理?
我检查了 ActiveModel 序列化程序,但在这种情况下它似乎不提供反序列化。除非我错过了什么。
https://github.com/rails-api/active_model_serializers/blob/v0.10.6/docs/general/deserialization.md
我尝试了以下方法:
params.permit(:OrderID, :OrderType, :Area)
params.permit(:OrderID, :OrderType).require(:Area).permit(:Code)
params.permit(:OrderID, :OrderType).require(:Area)
# ActionController::ParameterMissing: param is missing or the value is empty: Area
答: 暂无答案
评论
ActiveController::Parameters
不会以任何方式更改传入参数键的大小写,也不关心。使用 snake case 只是 rails 的惯例。它实际上只是一个类似哈希的对象,您可以使用或拉出给定的密钥并将其切片。fetch
require
permit