2013-06-12 56 views
0

我想解析一些有一些隨機JSON的CSV。該JSON有雙引號:如何解析CSV中的JSON引號?

csv = CSV.parse('example,json=[{"json": "obj"}],endexample') 
CSV::MalformedCSVError: Illegal quoting in line 1. 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1925:in `block (2 levels) in shift' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1887:in `each' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1887:in `block in shift' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1849:in `loop' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1849:in `shift' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1791:in `each' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1805:in `to_a' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1805:in `read' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1379:in `parse' 
    from (irb):13 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/bin/irb:12:in `<main>' 

我讀過,在CSV你逃避引號,所以我已經試過類似.gsub('"','""')內的報價,但是這並沒有幫助。

csv = CSV.parse('example,json=[{""json"": ""obj""}],endexample') 
CSV::MalformedCSVError: Illegal quoting in line 1. 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1925:in `block (2 levels) in shift' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1887:in `each' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1887:in `block in shift' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1849:in `loop' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1849:in `shift' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1791:in `each' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1805:in `to_a' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1805:in `read' 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1379:in `parse' 
    from (irb):17 
    from /Users/kevzettler/.rbenv/versions/1.9.3-p194/bin/irb:12:in `<main>' 

回答

3

維基百科有關CSV:含有斷行

  • 場,雙引號,和/或逗號應 引用。 (如果不是,該文件可能無法正確處理 )。
  • 字段中的(雙)引號字符必須是由兩個(雙)引號字符表示的 。

試試這個:

csv = CSV.parse('example,"json=[{""json"": ""obj""}]",endexample')