将变量放在单引号中?

时间:2015-10-15 14:23:21

标签: ruby json api

大家好我向Campaign Monitor API发出请求,数据必须用单引号作为字符串保存,但是采用JSON格式。由于它必须是单引号,我无法输入任何变量值。以下是代码。

response = HTTParty.post(url, 
:basic_auth => auth, :body => '{
            "EmailAddress":"js@mike.com",
            "Name":"#{@fname}",
            "CustomFields":[
                  {
                            "Key":"firstName",
                            "Value":"#{@fname}"
                        },
                        {
                          "Key":"country",
                            "Value":"#{@country}"
                        }
                        ],
            "Resubscribe":true,
            "RestartSubscriptionBasedAutoresponders":true
        }')

我尝试了一些不同的方法,例如打破字符串并将其与变量拼接在一起,并使用双引号但是失败以及请求成功必须准确。

4 个答案:

答案 0 :(得分:3)

您可以构建Ruby哈希并将其转换为JSON,而不是手动构建JSON结构:

require 'json'

data = {
  'EmailAddress' => 'js@mike.com',
  'Name' => @fname,
  'CustomFields' => [
    { 'Key' => 'firstName', 'Value' => @fname },
    { 'Key' => 'country', 'Value' => @country }
  ],
  'Resubscribe' => true,
  'RestartSubscriptionBasedAutoresponders' => true
}

response = HTTParty.post(url, basic_auth: auth, body: data.to_json)

另请注意,Campaign Monitor API有一个Ruby gem:createsend-ruby

使用gem,上面的代码转换为:

custom_fields = [
  { 'Key' => 'firstName', 'Value' => @fname },
  { 'Key' => 'country', 'Value' => @country }
]
response = CreateSend::Subscriber.add(auth, list_id, 'js@mike.com', @fname, custom_fields, true, true)

答案 1 :(得分:1)

您可以尝试使用heredoc

response = HTTParty.post(url, 
  :basic_auth => auth, :body => <<-BODY_CONTENT
  {
        "EmailAddress":"js@mike.com",
        "Name":"#{@fname}",
        "CustomFields":[
              {
                        "Key":"firstName",
                        "Value":"#{@fname}"
                    },
                    {
                      "Key":"country",
                        "Value":"#{@country}"
                    }
                    ],
        "Resubscribe":true,
        "RestartSubscriptionBasedAutoresponders":true
  }
BODY_CONTENT
)

答案 2 :(得分:1)

您可以按照here

的说明使用heredoc
  

如果您使用双引号,也会遵循双引号规则   标识符。但是,不要在周围加上双引号   终止子。

puts <<"QUIZ"
Student: #{name}

1.\tQuestion: What is 4+5?
\tAnswer: The sum of 4 and 5 is #{4+5}
QUIZ

答案 3 :(得分:0)

你可以在这里使用文件:

name = 'John'
<<EOS
This is #{name}
EOS

或者,您可以使用灵活的引号,它们可以同时处理'"字符:

name = 'John'
%{
This is #{name}
}

灵活引用也适用于%()%!!