You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:55:16