2017-07-18 54 views
-1

我想要執行一個簡單的操作 - 將一些輸入文本轉換爲JSON,處理它,並進一步使用它。Ruby的gsub不會將 n視爲空白字符嗎?

require 'json' 

aws_region = "us-east-1" 

tag = `sudo aws ec2 describe-tags --region="#{aws_region}" -- 
filters "Name=resource-type,Values=instance" "Name=key,Values=Group" 
"Name=resource-id,Values=$(ec2metadata --instance-id)"` 

puts tag 

tag_json = tag.to_json.gsub(/\s+/, "") 
#tag_json = tag.gsub("\n", "") 

puts tag_json 

obj = JSON.parse(tag_json) 

desired_value = obj["Tags"][0]["Value"] 

puts desired_value 

我期望上面的內容去除包括換行符在內的所有空格,但令我驚訝的是,輸出中仍然有換行符。 JSON.parse失敗,出現以下錯誤,因爲換行符仍然存在。通過上面的附加tag_json賦值,可以刪除換行符併成功。

JSON::ParserError 
----------------- 
746: unexpected token at '"{\n\"Tags\": [\n{\n\"ResourceType\": 
\"instance\", \n\"ResourceId\": \"i-XXXXXX\", \n\"Value\": 
\"groupA\", \n\"Key\": \"Group\"\n}\n]\n}\n"' 

我最終不得不有一個單獨的案例換行。爲什麼gsub會將換行符視爲非空白字符?有沒有其他的表達方式可以將所有的空格,製表符和換行符結合起來,這樣我就可以將它們去掉了?

+0

'tag'具體是什麼? 「tag_json」結束了什麼?你確定你正在使用'tag_json'嗎? 'gsub(/ \ s + /,'')'應該刪除換行符,以避免你沒有向我們顯示,最小的例子對每個人都有用。順便說一句,JSON中的換行符(或其他空格)沒有任何問題。 –

+0

標記是你在那裏看到的,但是以純文本形式存在。我將在原始文章中添加一個更完整的示例。 –

+0

用完整上下文更新原始文章。正如你所看到的,它沒有太大的不同。 –

回答

1

也許這是一個編碼問題。嘗試tag_json = tag.to_json.gsub(/[\s\p{]/, "")

您的表達式中不需要+,因爲gsub無論如何都會刪除所有出現的單個字符。

考慮"aaaaaa".gsub(/a/, '') # => ""

+0

這對我很有用,所以我懷疑編碼問題是錯誤的。我從廚師的食譜中運行這個,看起來可能是這樣的。 –

相關問題