Ruby数组插入神秘字符
Ruby array inserting mystery characters
这很奇怪..我正在使用 Vacuum gem 从亚马逊产品广告 API 请求数据.. 并使用数组传递它需要的 ID.. 对于一些在我发送它和 API 收到它之间的原因是在 id 中插入了一个反斜杠?并且一直在这样做..
lookup_items = ['B00HJ50X4W']
puts lookup_items
response = x.item_lookup(
query: {'ItemId' => lookup_items ,
'ResponseGroup' => 'EditorialReview'
},
persistent: true
)
y = response.to_h
puts y
我运行上面的代码,这是响应:
B00HJ50X4W
{"Name"=>"ItemId", "Value"=>"[\"B00HJ50X4W\"]"}, {"Name"=>"Operation", "Value"=>"ItemLookup"}, {"Name"=>"ResponseGroup", "Value"=>"EditorialReview"}, {"Name"=>"Service", "Value"=>"AWSECommerceService"}, {"Name"=>"SignatureMethod", "Value"=>"HmacSHA256"}, {"Name"=>"SignatureVersion", "Value"=>"2"}, {"Name"=>"Timestamp", "Value"=>"2015-05-11T19:51:30Z"}, {"Name"=>"Version", "Value"=>"2013-08-01"}, {"Name"=>"Signature", "Value"=>"F6+Ju5im8CrJW5vjoZpRRqOUK9HO/wIR0NCF2E7lMfM="}]}, "RequestProcessingTime"=>"0.0053020000000000"}, "Items"=>{"Request"=>{"IsValid"=>"True", "ItemLookupRequest"=>{"IdType"=>"ASIN", "ItemId"=>"[\"B00HJ50X4W\"]", "ResponseGroup"=>"EditorialReview", "VariationPage"=>"All"}, "Errors"=>{"Error"=>{"Code"=>"AWS.InvalidParameterValue", "Message"=>"[\"B00HJ50X4W\"] is not a valid value for ItemId. Please change this value and retry your request."}}}}}}
有没有办法强制它只发送我发送的内容??有点不知所措..
没有反斜杠。 \"
是您在双引号字符串中编写 "
的方式。 IOW,"\""
与 '"'
相同。
在 Amazon Product Advertising API docs and the Vacuum gem docs 中,ItemId
字段只是一个字符串,所以基本上当你传入 ['B00HJ50X4W']
然后是 Vacuum gem只是在其上调用 .to_s
将其转换为您在响应中看到的格式的字符串:
[30] pry(main)> ['B00HJ50X4W'].to_s
=> "[\"B00HJ50X4W\"]"
修正你的参数,你就会修正你的问题。
更新
我刚刚注意到你的评论,所以你显然知道如何让这项工作一直有效,所以现在我猜你真的想知道如何请求多个项目的项目信息?
您应该编辑您的问题以使其清楚,然后那个问题的答案是(as the API says):"For more than one ID, use a comma-separated list of up to ten IDs." 所以:
lookup_items = ['B00HJ50X4W', 'OTHER_ID', 'YET_ANOTHER_ID']
response = x.item_lookup(
query: {'ItemId' => lookup_items.join(","),
'ResponseGroup' => 'EditorialReview'
},
persistent: true
)
即。您实际上创建了一个字符串,在 ID 之间使用逗号。
这很奇怪..我正在使用 Vacuum gem 从亚马逊产品广告 API 请求数据.. 并使用数组传递它需要的 ID.. 对于一些在我发送它和 API 收到它之间的原因是在 id 中插入了一个反斜杠?并且一直在这样做..
lookup_items = ['B00HJ50X4W']
puts lookup_items
response = x.item_lookup(
query: {'ItemId' => lookup_items ,
'ResponseGroup' => 'EditorialReview'
},
persistent: true
)
y = response.to_h
puts y
我运行上面的代码,这是响应:
B00HJ50X4W
{"Name"=>"ItemId", "Value"=>"[\"B00HJ50X4W\"]"}, {"Name"=>"Operation", "Value"=>"ItemLookup"}, {"Name"=>"ResponseGroup", "Value"=>"EditorialReview"}, {"Name"=>"Service", "Value"=>"AWSECommerceService"}, {"Name"=>"SignatureMethod", "Value"=>"HmacSHA256"}, {"Name"=>"SignatureVersion", "Value"=>"2"}, {"Name"=>"Timestamp", "Value"=>"2015-05-11T19:51:30Z"}, {"Name"=>"Version", "Value"=>"2013-08-01"}, {"Name"=>"Signature", "Value"=>"F6+Ju5im8CrJW5vjoZpRRqOUK9HO/wIR0NCF2E7lMfM="}]}, "RequestProcessingTime"=>"0.0053020000000000"}, "Items"=>{"Request"=>{"IsValid"=>"True", "ItemLookupRequest"=>{"IdType"=>"ASIN", "ItemId"=>"[\"B00HJ50X4W\"]", "ResponseGroup"=>"EditorialReview", "VariationPage"=>"All"}, "Errors"=>{"Error"=>{"Code"=>"AWS.InvalidParameterValue", "Message"=>"[\"B00HJ50X4W\"] is not a valid value for ItemId. Please change this value and retry your request."}}}}}}
有没有办法强制它只发送我发送的内容??有点不知所措..
没有反斜杠。 \"
是您在双引号字符串中编写 "
的方式。 IOW,"\""
与 '"'
相同。
在 Amazon Product Advertising API docs and the Vacuum gem docs 中,ItemId
字段只是一个字符串,所以基本上当你传入 ['B00HJ50X4W']
然后是 Vacuum gem只是在其上调用 .to_s
将其转换为您在响应中看到的格式的字符串:
[30] pry(main)> ['B00HJ50X4W'].to_s
=> "[\"B00HJ50X4W\"]"
修正你的参数,你就会修正你的问题。
更新
我刚刚注意到你的评论,所以你显然知道如何让这项工作一直有效,所以现在我猜你真的想知道如何请求多个项目的项目信息?
您应该编辑您的问题以使其清楚,然后那个问题的答案是(as the API says):"For more than one ID, use a comma-separated list of up to ten IDs." 所以:
lookup_items = ['B00HJ50X4W', 'OTHER_ID', 'YET_ANOTHER_ID']
response = x.item_lookup(
query: {'ItemId' => lookup_items.join(","),
'ResponseGroup' => 'EditorialReview'
},
persistent: true
)
即。您实际上创建了一个字符串,在 ID 之间使用逗号。