首页 > 解决方案 > 将 CSV 中的 Json 哈希转换为 ruby​​ 哈希

问题描述

在 CSV 文件中,我有以下行:

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

我可以解析它并像这样得到我的 ruby​​ 哈希:

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'

知道如何处理吗?谢谢

标签: jsoncsvhashruby-2.4

解决方案


我找到了使用 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"}

推荐阅读