2013-08-23 32 views
5

Tôi đang cố triển khai wysihml5 trong ứng dụng sinatra bằng Activerecord.to_json trên một giá trị không thể phân tích cú pháp lại

Các soạn thảo văn bản giàu hoạt động tuyệt vời và khi tôi gửi biểu mẫu tôi đã nhận bài html quyền điều khiển:

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

Sau đó, tôi loại bỏ băm entry "_wysihtml5_mode" từ Request.Params để tạo mục db, sau đó tôi chuyển đổi nội dung để 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) 

vấn đề là tôi không thể nhận được giá trị của tôi trở lại như khởi điểm:

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

Làm thế nào tôi có thể lấy lại charcters unicode này để phong cách utf-8 của họ (tôi có thể sai, tôi không thoải mái với bảng ký tự). Dường như trong chuyển đổi để json, một "được thêm vào lúc bắt đầu:?.

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

này có thể là vấn đề Bất cứ ý tưởng

+0

Bạn mong đợi điều gì sẽ xảy ra khi bạn chuyển đổi chuỗi thành định dạng JSON? Bạn không cần một cặp key-> giá trị cho nó để chuyển đổi đúng cách? – miah

+0

Vâng, tôi đã chuyển đổi thành json bởi vì, trong chương trình của tôi, giá trị nội dung đôi khi là một băm, đôi khi là một chuỗi hoặc một mảng ... Tôi không biết họ là một vấn đề với trình phân tích cú pháp JSON và các chuỗi đơn, rằng to_json trên chuỗi đã làm việc. – Joeyjoejoe

+0

vấn đề là JSON làm việc với các cặp giá trị quan trọng, vì vậy '{ "nội dung" => "chữ in đậm
nghiêng văn bản '} .to_json' trả json hợp lệ, nhưng'' chữ in đậm
văn bản in nghiêng ".to_json' không. – miah

Trả lời

4

vấn đề này xuất phát từ gọi to_json trên một giá trị duy nhất này doesn' t tạo ra một đại diện JSON đầy đủ đây là một số ví dụ:.

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

may mắn thay, các phân tích cú pháp JSON đi kèm với một "chế độ quirks" ai cho phép phân tích các giá trị duy nhất:

"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 

Tôi không chắc chắn về những gì: quirks_mode thực sự đang làm, có thể ai đó có thể giải thích một chút?

Các vấn đề liên quan