Raghu
Raghu

Reputation: 2563

How do I remove backslashes from a JSON string?

I have a JSON string that looks as below

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

I need to change it to the one below using Ruby or Rails:

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

I need to know how to remove those slashes.

Upvotes: 15

Views: 39021

Answers (6)

Lucas Emerick
Lucas Emerick

Reputation: 902

Use 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"}]}}}

Note that the "json-string" must me double-quoted for this to work, otherwise \" would be read as is instead of being "translated" to " which return a JSON::ParserError Exception.

Upvotes: 3

prajwalpinto
prajwalpinto

Reputation: 49

I tried the earlier approaches and they did not seem to fix my issue. My json still had backslashes. However, I found a fix to solve this issue.

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

Upvotes: 1

Chris Wessells
Chris Wessells

Reputation: 31

I needed to print a pretty JSON array to a file. I created an array of JSON objects then needed to print to a file for the DBA to manipulate.

This is how i did it.

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

It's a triple nested gsub that removes the \" first then removes the [" lastly removes the "]

I hope this helps

Upvotes: 3

denis.peplin
denis.peplin

Reputation: 9841

To avoid generating JSON with backslashes in console, use puts:

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

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

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

You could also use JSON.pretty_generate, with puts of course.

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

Upvotes: 42

Todd A. Jacobs
Todd A. Jacobs

Reputation: 84343

Use Ruby's String#delete! method. For example:

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"}]}}}

Upvotes: 8

Andrew Marshall
Andrew Marshall

Reputation: 96914

Replace all backslashes with empty string using gsub:

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

Note that the default output in a REPL uses inspect, which will double-quote the string and still include backslashes to escape the double-quotes. Use puts to see the string’s exact contents:

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

Further, note that this will remove all backslashes, and makes no regard for their context. You may wish to only remove backslashes preceding a double-quote, in which case you can do:

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

Upvotes: 7

Related Questions