【问题标题】:Convert csv to json in ruby在ruby中将csv转换为json
【发布时间】:2014-06-04 21:26:50
【问题描述】:

CSV

id,modifier1_name,modifier2_price,modifier2_name,modifier2_price,modifier2_status
1,'Small',10,'Large',20,'YYY'
2,'Small',20,'Large',30,'YYY'

JSON

[
{
 id: 1,
 modifier: [
   {name: 'Small', price: 10},
   {name: 'Large', price: 20, status: 'YYY'}]
},
{
 id: 2,
 modifier: [
   {name: 'Small', price: 20},
   {name: 'Large', price: 30, status: 'YYY'}],
}
]

当修饰符可以不同时,如何将 CSV 转换为 Json?

【问题讨论】:

  • JSON 对象中不能有相同的键modifier 出现多次

标签: ruby json csv


【解决方案1】:

您需要自己映射修饰符,因为没有内置方法可以将哈希值从您的逻辑映射到数组中:

JSON.pretty_generate(CSV.open('filename.csv', headers: true).map do |row|
  modifier = {}
  row.each do |k, v|
    if k =~ /modifier(.)_(.*)$/
      (modifier[$1] ||= {})[$2] = v
    end
  end
  { id: row['id'],
    modifier: modifier.sort_by { |k, v| k }.map {|k, v| v }
  }
end)

对于文件*

id,modifier1_name,modifier1_price,modifier2_name,modifier2_price,modifier2_status
1,Small,10,Large,20,YYY
2,Small,20,Large,30,YYY

*我对您显示的文件进行了一些更改,因为它不会给您所需的结果 - 例如,您两次声明 modifier2_price,

你会得到:

[
  {
    "id": "1",
    "modifier": [
      {
        "name": "Small",
        "price": "10"
      },
      {

        "name": "Large",
        "price": "20",
        "status": "YYY"
      }
    ]
  },
  {
    "id": "2",
    "modifier": [
      {
        "name": "Small",
        "price": "20"
      },
      {
        "name": "Large",
        "price": "30",
        "status": "YYY"
      }
    ]
  }
]

【讨论】:

    【解决方案2】:
    require 'csv'
    require 'json'
    
    CSV.open('filename.csv', :headers => true).map { |x| x.to_h }.to_json
    

    【讨论】:

    • 你提到的方式它不会生成修饰符数组。我知道如何简单地将 csv 转换为 json。
    • @krunalshah 你有修饰符在你的JSON 对象中出现多次,我怀疑这是可能的,如果你更正了,我可以更新我的答案
    • 在 Ruby 2.2.0 中,最后的 .to_json 不是必需的:myjson = CSV.open(filename, :headers => true).map { |x| x.to_h } 工作正常。如果你添加 .to_json 你会得到断字符串
    猜你喜欢
    • 1970-01-01
    • 2018-04-10
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多