0

CSV ファイルには、次の行があります。

data1;data2;{"key1":"value1","key2":"value2"}

私はそれを解析して、次のようにルビーハッシュを取得できます:

require 'csv'
line = 'data1;data2;{"key1":"value1","key2":"value2"}'
csv = CSV.parse_line(line, col_sep: ";", quote_char: "\x00")
=> ["data1", "data2", "{\"key1\":\"val", "ue1\",\"key2\":\"value2\"}"]
JSON.parse(csv[2])

しかし...値に区切り文字(;)が含まれている場合、解釈されるため失敗します

require 'csv'
line = 'data1;data2;{"key1":"val;ue1","key2":"value2"}'
csv = CSV.parse_line(line, col_sep: ";", quote_char: "\x00")
=> ["data1", "data2", "{\"key1\":\"val", "ue1\",\"key2\":\"value2\"}"]
# Of course
JSON.parse(csv[2])
JSON::ParserError: 784: unexpected token at '{"key1":"val'

それに対処する方法はありますか?ありがとう

4

1 に答える 1

0

CSV を使用してハッシュを書き込む正しい構文を見つけました。csv ファイルのハッシュを

data1;data2;{"key1":"val;ue1","key2":"value2"}

data1;data2;"{""key1"":""val;ue1"",""key2"":""value2""}"

これは実際には人間が読めるものではありませんが、機能します。

完全な作業コード:

require 'csv'
line = 'data1;data2;"{""key1"":""val;ue1"",""key2"":""value2""}"'
csv = CSV.parse_line(line, col_sep: ";", quote_char: "\"")
=> ["data1", "data2", "{\"key1\":\"val;ue1\",\"key2\":\"value2\"}"]
JSON.parse(csv[2])
=> {"key1"=>"val;ue1", "key2"=>"value2"}
于 2019-11-20T09:22:17.383 に答える