0

ランダムな 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>' 
4

1 に答える 1

4

CSVに関するウィキペディアから:

  • 改行、二重引用符、および/またはコンマを含むフィールドは引用符で囲む必要があります。(そうでない場合、ファイルを正しく処理できない可能性があります)。
  • フィールド内の (二重) 引用符は、2 つの (二重) 引用符で表す必要があります。

これを試して:

csv = CSV.parse('example,"json=[{""json"": ""obj""}]",endexample')
于 2013-06-12T22:12:40.500 に答える