2017-07-18 52 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

这对我很有用,所以我怀疑编码问题是错误的。我从厨师的食谱中运行这个,看起来可能是这样的。 –

相关问题