我想要执行一个简单的操作 - 将一些输入文本转换为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会将换行符视为非空白字符?有没有其他的表达方式可以将所有的空格,制表符和换行符结合起来,这样我就可以将它们去掉了?
'tag'具体是什么? “tag_json”结束了什么?你确定你正在使用'tag_json'吗? 'gsub(/ \ s + /,'')'应该删除换行符,以避免你没有向我们显示,最小的例子对每个人都有用。顺便说一句,JSON中的换行符(或其他空格)没有任何问题。 –
标记是你在那里看到的,但是以纯文本形式存在。我将在原始文章中添加一个更完整的示例。 –
用完整上下文更新原始文章。正如你所看到的,它没有太大的不同。 –