大家好我向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
}')
我尝试了一些不同的方法,例如打破字符串并将其与变量拼接在一起,并使用双引号但是失败以及请求成功必须准确。
答案 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}
}
灵活引用也适用于%()
和%!!
。