[英]Ruby on Rails: how to parse a JSON string that may or may not contain an array
[英]Ruby on Rails: How may create a quoted string to a request header?
我正在从头开始编写Twitter客户端,但前提之一是不使用Twitter gems,因此必须创建自己的请求。
Twitter API文档在这里说,我必须具有这样的Authorization标头:
Authorization:
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"
如您所见,我必须使用类似oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog"
,并将第二部分用引号引起来。 我尝试使用像
["oauth_consumer_key",%Q( Figaro.env.TWITTER_ACCESS_TOKEN )].join('=')
假设%Q将返回带引号的字符串。 但是当我检查价值时,我得到的只是
oauth_consumer_key=xvz1evFS4wEEPTGEFPHBog
显然,这与所需结果不同。
我想念什么?
%Q(x)
与“ x”基本相同。
为了获得所需的结果,您必须手动将引号引入%Q
表达式中,例如: %Q("#{Figaro.env.TWITTER_ACCESS_TOKEN}")
1.我的解决方案:
'oauth_consumer_key="#{Figaro.env.TWITTER_ACCESS_TOKEN}"'
2.为什么:
%Q()
基本上用双引号""
替换变量,这实际上与您编写"Figaro.env.TWITTER_ACCESS_TOKEN"
实际上,要显示变量的内容 ,必须使用"#{var}"
使用插值法而不是名称本身。
您也可以将%Q
直接用于%Q{var}
插值(注意{}
代替()
)。
您的问题在其他地方:使用join()方法。 它消除了双引号。 在那种情况下,执行["var", var].join('=')
和["var", %Q{var}].join('=')
会做完全相同的事情,但是更加复杂。
@Artem Ignatiev的解决方案应该有效 。 但是,如果您需要更具可读性,甚至不需要加入,恕我直言,仅当您使用两个以上的变量时,它才有意义。
例如,我将使用诸如'oauth_consumer_key="#{var}"'
混合单引号和双引号来确保不会引起混淆。
如果确实需要使用%Q()
和join
,则仍然可以使用["oauth_consumer_key", %Q("#{Figaro.env.TWITTER_ACCESS_TOKEN})].join('=')
。
join
您可以使用单引号内插%q
或双引号内插%Q
而不影响最终结果: 例如
['oauth_consumer_key', %q("#{var}")].join('=') == ["oauth_consumer_key", %Q("#{var}")].join('=')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.