Rails中如何将字符串转换为JSON对象数组?
解决方案
要实现将information从JSON字符串改为直接传递JSON对象数组,需要从请求参数格式和后端参数校验两方面调整:
1. 修改Postman请求参数格式
直接传递标准JSON数组,注意JSON语法要求:键名和字符串值必须用双引号包裹,示例如下:
{ "section": "139", "information": [ {"type": "c", "temperature": 9} ] }
注意:原请求中的
type:c不符合JSON语法,必须改为"type": "c"才能被正确解析。
2. 确保后端正确处理参数
2.1 检查请求头
Postman中选择raw -> JSON格式时,会自动设置Content-Type: application/json请求头,这是Rails正确解析JSON参数的前提。如果手动设置请求头,务必保证该字段存在。
2.2 调整Strong Parameters
在ArticlesController中,确保information参数被正确允许接收嵌套的数组对象。修改参数校验代码:
def article_params params.require(:article).permit( :section, information: [:type, :temperature] # 允许数组中包含指定键的对象 ) end
如果需要更灵活地接收information中的任意键,可以改为:
def article_params params.require(:article).permit( :section, information: {} # 允许任意结构的对象数组 ) end
3. 验证数据库存储
由于你已经通过迁移将information字段设为json类型,Rails会自动将传入的JSON数组转换为Ruby哈希数组存储到数据库,读取时也会自动反序列化为Ruby对象,无需额外处理。
小提示:原迁移中的默认值存在语法问题,
"type:c":"12"的键名应为"type",值为"12",建议修正迁移(如果还没部署到生产环境):def change add_column :articles, :information, :json, default: '[{ "type": "c", "temperature": 12 }]', null: false end
内容的提问来源于stack exchange,提问作者register
相关产品推荐
相关产品推荐

