2013-08-23 10 views
5

sto provando a implementare wysihml5 in un'applicazione sinatra utilizzando Activerecord.to_json su singolo valore non può essere restituito

L'editor di testo ricco funziona alla grande e quando ho inviare il modulo di I Got a destra dopo html nel controllore:

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

Poi, rimuovo hash entry "_wysihtml5_mode" da request.params per creare la voce di db, poi ho convertire i contenuti a 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) 

Il problema è che non posso ottenere il mio valore indietro come inizio:

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... 

Come potrei recuperare questi caratteri unicode nel loro stile utf-8 (potrei sbagliarmi, non mi trovo a mio agio con la tabella dei caratteri). Sembra che durante la conversione a JSON, un "si aggiunge agli inizi:?.

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

Questo potrebbe essere il problema Tutte le idee

+0

Che cosa ti aspetti che succeda quando converti una stringa in formato JSON? Non hai bisogno di una chiave-> coppia di valori per convertirla correttamente? – miah

+0

Beh, stavo convertendo in JSON perché, nel mio programma, il valore del contenuto è a volte un hash, a volte una stringa o un array ... Non sapevo che fosse un problema con il parser JSON e le stringhe singole, dato che to_json on string stava funzionando. – Joeyjoejoe

+0

il problema è che JSON funziona con coppie di valori chiave, in modo '{ "contenuto"=>" testo in grassetto
testo in corsivo '} .to_json' ritorna JSON valido, ma '' testo in grassetto
corsivo ".to_json' no. – miah

risposta

4

Il problema viene da chiamare to_json su un singolo valore Questo doesn' t produrre una rappresentazione completa JSON Ecco alcuni esempi:.

"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... 

Fortunatamente, il parser JSON sono dotati di una "quirks mode" che permette di analizzare singoli valori:

"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 

Non sono sicuro di cosa: Quirks_mode sta davvero facendo, forse qualcuno potrebbe spiegarlo un po '?

Problemi correlati