2013-08-20 96 views
3

我有一個JSON字符串,看起來如下如何從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

這看起來非常像一個適當的JSON字符串的檢查輸出。 –

回答

6

使用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"}]}}} 
5

使用gsub空字符串替換所有反斜線:

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

注意,在一個REPL默認的輸出使用inspect,將雙引號字符串,並仍包含反斜槓逃脫雙引號。使用puts看到字符串的確切內容:

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

此外,注意,這將刪除所有反斜線,併爲他們的上下文中沒有考慮。您可能希望只刪除反斜槓前面的雙引號,在這種情況下,你可以這樣做:

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

的如果Little Bobby Tables在其中一個JSON值中放置'\「',則第二個問題會出現問題。 –

+0

@ muistooshort對。一如既往,這是偶然的。我想真正的問題是:爲什麼JSON是這樣的呢? (哎呀,剛剛在''上面看到你的評論''')。 –

12

爲了避免與控制檯反斜槓產生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

'puts'返回'nil',那麼如何將沒有反斜槓的刺痛保存到變量?或者我如何將它發送到某個地方? – Viktor

+0

Viktor:您可以使用StringIO寫入字符串 –

+0

嗯......我經歷了通過放入我的真實代碼後逃脫,雖然它工作時,我做了一個簡單的測試。令人沮喪的 - 我可能不得不採取消除字符串來刪除封閉的引號和黑色陰影,如Chris的回答 –

2

我需要打印漂亮的JSON數組到文件。我創建了一個JSON對象數組,然後需要將其打印到DBA操作的文件中。

這就是我做到的。

puts(((dirtyData.gsub(/ \「/,」\「」)).gsub(/ [「/,」[「)).gsub(/」] /,「]」))

這是一個三重嵌套GSUB,消除了\「第一,然後刪除[」最後刪除「]

我希望這有助於

+0

請格式化代碼。 –

+0

我懷疑這樣會更快一些:to_json.delete!('\\')。sub!(/ ^「(。+)」$ /,「#{$ 1}」,你不能在評論中格式化爲我知道的很遠 –