![](/img/trans.png)
[英]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.