我有一个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"}]}}}'
我需要知道如何删除这些斜杠。
答案 0 :(得分:21)
要避免在控制台中使用反斜杠生成JSON
,请使用puts
:
> hash = {test: 'test'}
=> {:test=>"test"}
> hash.to_json
=> "{\"test\":\"test\"}"
> puts hash.to_json
{"test":"test"}
您当然可以使用JSON.pretty_generate
,puts
。
> 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!(/\"/, '\'')