我是ruby和json的新手,所以可能会以错误的方式解决这个问题。
我想获取一个以管道分隔格式的库存并将其转换为json。
我在这里尝试过这个例子Convert csv to json in ruby
但是由于数据处于平面格式,并且将被转换为嵌套,其中列中的值匹配,例如csv文件将如下所示: -
id|shelf|package|price
cupboarda|shelf1|can1|10
cupboarda|shelf1|box1|20
cupboarda|shelf2|can1|10
cupboarda|shelf2|box1|20
cupboarda|shelf3|can1|30
我正在尝试将其转换为json,如: -
{
"id": "cupboarda",
"shelf": {
"shelf1": {
"package": {
"can1": {
"price": "10"
},
"box1": {
"price": "20"
}
}
},
"shelf2": {
"package": {
"can1": {
"price": "10"
},
"box1": {
"price": "20"
}
}
},
"shelf3": {
"package": {
"can1": {
"price": "30"
}
}
}
}
}
我认为我在链接中的示例处于正确的轨道,但是我对嵌套它的方式感到有些困惑。
这是我尝试将所有东西都变成一种块的方法,这样我就可以找出一些逻辑,将字段提取为嵌套的JSON或嵌套的哈希,然后我可以将其格式化为json或者其他东西其他
require 'csv'
csv_data = CSV.read 'data.csv', :col_sep => "|"
headers = csv_data.shift.map {|i| i.to_s }
string_data = csv_data.map {|row| row.map {|cell| cell.to_s } }
array_of_hashes = string_data.map {|row| Hash[*headers.zip(row).flatten] }
puts "Array"
p array_of_hashes
让我陷入困境的是试图找出如何使用id中的值并开始切割并将数据嵌套在彼此之下。 刚开始使用Ruby,所以逻辑部分是我的砖墙,上面的代码是我在其他地方发现的,我认为它给了我想要的但可能不是最好的方法。
更新>
仍然试图绕过这个逻辑,但到目前为止这是我已经走了多远: -
require 'csv'
require 'json'
csv_data = CSV.read 'inv.csv', :col_sep => "|"
headers = csv_data.shift.map {|i| i.to_s }
string_data = csv_data.map {|row| row.map {|cell| cell.to_s } }
array_of_hashes = string_data.map {|row| Hash[*headers.zip(row).flatten] }
summary = {}
array_of_hashes.each do |rec|
ida, shelfa, packagea, pricea = rec.values_at('id','shelf','package','price')
((summary[ida] ||= {})[shelfa] ||= {})[packagea] ||= 0
summary[ida][shelfa][packagea] = pricea
end
puts summary.to_json
puts summary
如果我将数据放在一个名为inv.csv的文件中,会产生一些接近我想要的东西。
我得到了这个输出
{"cupboarda":{"shelf1":{"can1":"10","box1":"20"},"shelf2":{"can1":"10","box1":"20"},"shelf3":{"can1":"30"}}}
{"cupboarda"=>{"shelf1"=>{"can1"=>"10", "box1"=>"20"}, "shelf2"=>{"can1"=>"10", "box1"=>"20"}, "shelf3"=>{"can1"=>"30"}}}
我只需要弄清楚我能把它变得像以下那样紧凑: -
{"cupboard":"cupboarda","shelf":{"shelf1":{"package":{"can1":{"price":"10"},"box1":{"price":"20"}}},"shelf2":{"package":{"can1":{"price":"10"},"box1":{"price":"20"}}},"shelf3":{"package":{"can1":{"price":"30"}}}}}
答案 0 :(得分:-2)
您使用的是哪种语言?
对于javascript,在Google和c# take a look at this question中查找“jsfiddle csv json”。在我的c#项目中,我使用了NewtonSoft's brilliant JSON框架。