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

Rag*_*ghu 9 ruby string json escaping

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

'{\"test\":{\"test1\":{\"test1\":[{\"test2\":\"1\",\"test3\": \"foo\",\"test4\":\"bar\",\"test5\":\"test7\"}]}}}'
Run Code Online (Sandbox Code Playgroud)

我需要使用Ruby或Rails将其更改为下面的一个:

'{"test":{"test1":{"test1":[{"test2":"1","test3": "foo","test4":"bar","test5":"bar2"}]}}}'
Run Code Online (Sandbox Code Playgroud)

我需要知道如何删除这些斜杠.

den*_*lin 26

要避免JSON在控制台中使用反斜杠生成,请使用puts:

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

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

> puts hash.to_json
{"test":"test"}
Run Code Online (Sandbox Code Playgroud)

当然JSON.pretty_generate,你也可以使用它puts.

> puts JSON.pretty_generate(hash)
{
  "test": "test"
}
Run Code Online (Sandbox Code Playgroud)

  • `puts` 返回 `nil`,那么如何将不带反斜杠的字符串保存到变量中呢?或者我如何将其发送到某个地方? (2认同)

Tod*_*obs 7

使用Ruby的String#delete!方法.例如:

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"}]}}}
Run Code Online (Sandbox Code Playgroud)


And*_*all 5

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

json.gsub('\\', '')
Run Code Online (Sandbox Code Playgroud)

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

{"test":{"test1":{"test1":[{"test2":"1","test3": "foo","test4":"bar","test5":"test7"}]}}}

此外,请注意,这将删除所有反斜杠,并且不考虑它们的上下文.您可能希望仅删除双引号之前的反斜杠,在这种情况下,您可以执行以下操作:

json.gsub('\"', '')
Run Code Online (Sandbox Code Playgroud)