2013-08-23 19 views
5

我試圖在使用Activerecord的sinatra應用程序中實現wysihml5to_json單個值無法解析

的富文本編輯器的偉大工程,當我提交表單,我得到正確的HTML崗位控制器:

pry:> request.params 
=> {"title" => "title text", 
"content" => "<b>bold text</b><br><i>italic text</i>", 
"_wysihtml5_mode" => 1 
} 

然後,我刪除哈希條目「_wysihtml5_mode」從request.params創建數據庫的條目,然後我將視頻轉碼JSON:

pry:> request.params.delete("_wysihtml5_mode") 
=> 1 
pry:> request.params["content"].to_json 
=> "\"\\u003Cb\\u003Ebold text\\u003C/b\\u003E... 
pry:> class.create(request.params) 

問題是我不能讓我的價值早在begining:

pry:> class.last.content 
=> "\"\\u003Cb\\u003Ebold text\\u003C/b\\u003E... 
pry:> JSON.parse(class.last.content) 
JSON::ParseError: 743: unexpected token at '"\\u003Cb\\u003Ebold text\\u003C/b\\u003E... 

我怎麼能找回這個Unicode字符到他們的utf-8風格(我可能是錯的,我不習慣字符表)。看來,皈依到JSON期間,一個在開始時添加「:??

    "<b>bold => "\"\\u003Cb\\u003Ebold 

這可能是問題的任何想法

+0

當您將字符串轉換爲JSON格式時,您會發生什麼?你不需要一個鍵 - >值對來正確轉換嗎? – miah

+0

嗯,我轉換爲JSON,因爲在我的程序中,內容值有時是散列,有時是字符串或數組......我不知道他們是JSON解析器和單個字符串的問題,在字符串to_json工作。 – Joeyjoejoe

+0

的問題是,JSON工作與鍵值對,所以'{「內容」 =>「粗體文字
斜體‘} .to_json'返回有效的JSON,但'’粗體文字
斜體「.to_json」沒有。 – miah

回答

4

的問題來自於呼叫to_json上一個值這沒有按」牛逼生產全JSON表示下面是一些例子:

"hello".to_json 
=> "\"hello\"" 

JSON.parse("hello".to_json) 
=> JSON::ParseError: 743: unexpected token at... 

nil.to_json 
=> "null" 

JSON.parse(nil.to_json) 
=> JSON::ParseError: 743: unexpected token at... 

幸運的是,JSON解析器拿出一個「怪癖模式」誰允許解析單個值:

"hello".to_json 
=> "\"hello\"" 

JSON.parse("hello".to_json, {:quirks_mode => true}) 
=> "hello" 

nil.to_json 
=> "null" 

JSON.parse(nil.to_json, {:quirks_mode => true}) 
=> nil 

我不確定什麼:quirks_mode真的在做什麼,也許有人可以解釋一下?