2013-08-23 24 views
5

Próbuję zaimplementować wysihml5 w aplikacji Sinatra przy użyciu Activerecord.to_json na pojedynczej wartości nie można przeanalizować

Bogaty edytor tekstu działa świetnie i kiedy złożyć formularz mam prawo html post do kontrolera:

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

Następnie usunąć skrótu wejścia „_wysihtml5_mode” od request.params aby utworzyć wpis db, następnie przekonwertować zawartość do 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) 

problemem jest to, że nie mogę dostać mój wartość z powrotem jako początek:

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

Jak mogę odzyskać te znaki Unicode do ich stylu utf-8 (może się mylę, nie czuję się dobrze z tabelą znaków). Wydaje się, że podczas przeliczaniem do formatu JSON, a "dodaje się na początku:?.

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

To może być problem Wszelkie pomysły

+0

Czego oczekujesz po przekonwertowaniu ciągu znaków na format JSON? Czy nie potrzebujecie pary klucz-> wartość do jej konwersji? – miah

+0

Cóż, przechodziłem na json, ponieważ w moim programie wartość treści jest czasem hashem, czasem łańcuchem lub tablicą ... Nie wiedziałem, że ich problem dotyczył parsera JSON i pojedynczych ciągów znaków. że działa to_json na łańcuchu. – Joeyjoejoe

+0

problem jest to, że działa z JSON par wartości klucza, więc '{ "content"=>" tekst pogrubiony
tekst kursywą "} .to_json' zwraca poprawny json, ale'" tekst pogrubiony
kursywą tekst ".to_json' nie. – miah

Odpowiedz

4

Problem pochodzi z wywołaniem to_json na pojedynczej wartości to robi” t produkować pełną reprezentację JSON Oto kilka przykładów:.

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

szczęście parsera JSON pochodzą z "quirks Mode", który pozwala analizować pojedyncze wartości:

"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 

Nie jestem pewien co: quirks_mode naprawdę robi, może ktoś mógłby to wyjaśnić?