Ruby 如何从JSON字符串中删除反斜杠?

Ruby 如何从JSON字符串中删除反斜杠?,ruby,json,string,escaping,Ruby,Json,String,Escaping,我有一个JSON字符串,如下所示 '{\"test\":{\"test1\":{\"test1\":[{\"test2\":\"1\",\"test3\": \"foo\",\"test4\":\"bar\",\"test5\":\"test7\"}]}}}' 我需要使用Ruby或Rails将其更改为以下内容: '{"test":{"test1":{"test1":[{"test2":"1","test3": "foo","test4":"bar","test5":"bar2"}]}}}'

我有一个JSON字符串,如下所示

'{\"test\":{\"test1\":{\"test1\":[{\"test2\":\"1\",\"test3\": \"foo\",\"test4\":\"bar\",\"test5\":\"test7\"}]}}}'
我需要使用Ruby或Rails将其更改为以下内容:

'{"test":{"test1":{"test1":[{"test2":"1","test3": "foo","test4":"bar","test5":"bar2"}]}}}'
我需要知道如何删除这些斜杠。

使用Ruby的方法。例如:

str = '{\"test\":{\"test1\":{\"test1\":[{\"test2\":\"1\",\"test3\": \"foo\",\"test4\":\"bar\",\"test5\":\"test7\"}]}}}'
str.delete! '\\'
puts str
#=> {"test":{"test1":{"test1":[{"test2":"1","test3": "foo","test4":"bar","test5":"test7"}]}}}

使用以下命令将所有反斜杠替换为空字符串:

请注意,REPL中的默认输出使用
inspect
,它将双引号引到字符串中,并且仍然包含反斜杠以转义双引号。使用
put
查看字符串的确切内容:

{"test":{"test1":{"test1":[{"test2":"1","test3": "foo","test4":"bar","test5":"test7"}]}}}
要避免在控制台中生成带有反斜杠的
JSON
,请使用
put

> hash = {test: 'test'}
=> {:test=>"test"}

> hash.to_json
 => "{\"test\":\"test\"}"

> puts hash.to_json
{"test":"test"}
您还可以使用
JSON.pretty_generate
,当然还有
put

> puts JSON.pretty_generate(hash)
{
  "test": "test"
}

我需要将一个漂亮的JSON数组打印到一个文件中。我创建了一个JSON对象数组,然后需要打印到一个文件中,以便DBA进行操作

我就是这样做的

puts(((dirtyData.gsub(/\\"/, "\"")).gsub(/\["/, "\[")).gsub(/"\]/, "\]"))
它是一个三层嵌套的gsub,先删除\“然后删除[“最后删除”]


我希望这有帮助

我尝试了以前的方法,但它们似乎没有解决我的问题。我的json仍然有反斜杠。但是,我找到了解决这个问题的方法

myuglycode.gsub!(/\”/,“\”)
使用JSON.parse()


请注意,“json字符串”必须被双引号引用才能起作用,否则
\“
将按原样读取,而不是被“翻译”为
,后者返回
json::ParserError异常

,当小Bobby Tables放入
\“
在一个JSON值内。@muistooshort Right。和往常一样,这有点随意。我想真正的问题是:为什么JSON最初是这样的?(哎哟,刚才看到你在上面的评论:))。这看起来非常像一个正确的JSON字符串的检查输出。
put
返回
nil
,那么我如何在不使用反斜杠的情况下将sting保存到变量?或者我怎么把它发送到某个地方?维克多:你可以用StringIO向stringHmmm写东西。。。虽然我做了一个简单的测试,但在我真正的代码中通过了puts之后,我一直在逃避。令人沮丧的是——我可能不得不像Chris的回答中那样通过咀嚼字符串来删除括起来的引号和黑色斜杠。我怀疑这会快一点:删除json.delete!(“\\”).sub!(/^“(.+)”$/,“#{$1}”并且据我所知,您不能在注释中设置格式
> puts JSON.pretty_generate(hash)
{
  "test": "test"
}
puts(((dirtyData.gsub(/\\"/, "\"")).gsub(/\["/, "\[")).gsub(/"\]/, "\]"))
JSON.parse("{\"test\":{\"test1\":{\"test1\":[{\"test2\":\"1\",\"test3\": \"foo\",\"test4\":\"bar\",\"test5\":\"test7\"}]}}}")
> {"test"=>{"test1"=>{"test1"=>[{"test2"=>"1", "test3"=>"foo", "test4"=>"bar", "test5"=>"test7"}]}}}