13

我有一个如下所示的 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"}]}}}'

我需要知道如何删除那些斜线。

4

6 回答 6

37

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

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

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

> puts hash.to_json
{"test":"test"}

当然,您也可以使用JSON.pretty_generate, with puts

> puts JSON.pretty_generate(hash)
{
  "test": "test"
}
于 2015-07-27T06:43:48.977 回答
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"}]}}}
于 2013-08-20T01:42:48.863 回答
7

使用空字符串替换所有反斜杠gsub

json.gsub('\\', '')

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

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

此外,请注意,这将删除所有反斜杠,并且不考虑它们的上下文。您可能希望只删除双引号前的反斜杠,在这种情况下,您可以这样做:

json.gsub('\"', '')
于 2013-08-20T01:42:57.960 回答
3

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

我就是这样做的。

puts(((dirtyData.gsub(/\\"/, "\"")).gsub(/\["/, "\[")).gsub(/"\]/, "\]"))

这是一个三重嵌套的 gsub,首先删除 \" 然后删除 [" 最后删除 "]

我希望这有帮助

于 2016-08-05T04:45:42.143 回答
1

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

myuglycode.gsub!(/\"/, '\'')

于 2019-12-18T17:37:07.643 回答
0

使用 JSON.parse()

JSON.parse("{\"test\":{\"test1\":{\"test1\":[{\"test2\":\"1\",\"test3\": \"foo\",\"test4\":\"bar\",\"test5\":\"test7\"}]}}}")
> {"test"=>{"test1"=>{"test1"=>[{"test2"=>"1", "test3"=>"foo", "test4"=>"bar", "test5"=>"test7"}]}}}

请注意,“json-string”必须我双引号才能工作,否则\"将按原样读取,而不是被“翻译”成"返回 a JSON::ParserError Exception

于 2020-07-04T20:31:09.123 回答