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

时间:2013-08-20 00:50:46

标签: 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"}]}}}'

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

6 个答案:

答案 0 :(得分:21)

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

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

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

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

您当然可以使用JSON.pretty_generateputs

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

答案 1 :(得分: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"}]}}}

答案 2 :(得分:5)

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

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

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

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

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

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

答案 3 :(得分:2)

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

这就是我做到的。

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

这是一个三重嵌套的gsub,删除\“然后删除[”最后删除“]

我希望这会有所帮助

答案 4 :(得分:1)

使用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”必须加双引号才能起作用,否则\"将按原样读取,而不是被“翻译”为"并返回{{1 }}。

答案 5 :(得分:-1)

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

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