json - 将 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'
知道如何处理吗?谢谢
解决方案
我找到了使用 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"}
推荐阅读
- node.js - 为什么`sudo npm uninstall htmlhint -g`没有从`node_modules`中删除`htmlhint`文件夹?不工作?
- python-3.x - 成对的相似代码会产生由“except”语句引起的不同结果
- c++ - 将函数指针传递给模板类
- scala - 我想用一组关键词过滤 Lines read form 文本文件
- c++ - 错误:没有用于调用“CreateFileW”的匹配函数
- java - Eclipse 控制台未显示标准错误
- c# - 实体框架自动增量
- java - 如何从 Firebase 数据库获取密码并与 edittext 匹配?
- angular - Angular - 如何更改文本输入状态
- javascript - 如果数组中包含 JavaScript/lodash 中的特定字符/字符串,如何消除数组中的值?