首页 > 解决方案 > Ruby 使用对象数组进行 put / post http 调用

问题描述

我有这个 http 调用代码,类型是表单

      param = {
      form: {
      "creatives[]" => [
        {
          is_visible: params[:creative_banner_is_visible],
          type: "banner",
          value_translations: {
              id: params[:creative_banner_value_id],
              en: params[:creative_banner_value_en]
          }
        },
        {
          is_visible: params[:creative_video_is_visible],
          type: "video",
          value_translations: {
              id: params[:creative_video_value_id],
              en: params[:creative_video_value_en]
          }
        }
      ]
      }
      }

      http = HTTP.headers(headers)
      http.put(base_url, param)

但不知何故,这在目标服务器上被翻译成这个

"creatives"=>[
    "{:is_visible=>\"true\", :type=>\"banner\", :value_translations=>{:id=>\"Banner URL ID\", :en=>\"Banner URL EN\"}}",
    "{:is_visible=>\"true\", :type=>\"video\", :value_translations=>{:id=>\"12345ID\", :en=>\"12345EN\"}}"
]

你知道如何使这个 http 调用不被字符串化吗?我在邮递员上使用了相同的模式并且工作得很好

    "creatives": [
        {
            "is_visible": true,
            "type": "banner",
            "value_translations": {
                "id": "http://schroeder.info/elinore",
                "en": "http://wehner.info/dusti"
            }
        },
        {
            "is_visible": true,
            "type": "video",
            "value_translations": {
                "id": "85177e87-6b53-4268-9a3c-b7f1c206e002",
                "en": "5134f3ca-ead7-4ab1-986f-a695e69ace96"
            }
        }
    ]

我正在使用这个 gem https://github.com/httprb/http

标签: ruby-on-railsrubyhttp

解决方案


编辑

首先,将您的替换"creatives[]" => [ ...为,creatives: [ ...因此最终结果应如下所示。

      creatives = [
        {
          is_visible: params[:creative_banner_is_visible],
          type: "banner",
          value_translations: {
              id: params[:creative_banner_value_id],
              en: params[:creative_banner_value_en]
          }
        },
        {
          is_visible: params[:creative_video_is_visible],
          type: "video",
          value_translations: {
              id: params[:creative_video_value_id],
              en: params[:creative_video_value_en]
          }
        }
      ]

      http = HTTP.headers(headers)
      http.put(base_url, creatives.to_json)

其次,我认为您在目标服务器中获得的内容没有任何问题,您只需将其解析为 JSON,因此如果您还有一个 Rails 应用程序可以JSON.parse在主体上使用。


推荐阅读