在 Ruby 中转换为 JSON

convert to JSON in Ruby

提问人:Jake Statefarm 提问时间:3/21/2023 最后编辑:Jake Statefarm 更新时间:3/21/2023 访问量:44

问:

我在文本文件中有以下行,并使用 File.foreach 进行迭代。我想创建这些的JSON格式。我该如何编码?当我打印哈希值时,Camaro 会覆盖 Mustang 信息。

#textfile#
Blue   A   Mustang
Red    B   Camaro   

File.each("textfile") di |line|
  fields = line.split
  field1 = fields.first
  field2 = fields.[1]
  field3 = fields.last
  puts field1
  puts field2
  puts field3
  myhash['color'] = field1
  myhash['parkingspot'] = field2 
  myhash['car'] = field3 
end

提前致谢! 杰克

我尝试推送哈希

json ruby 字符串 变量 hash

评论

0赞 user3788685 3/21/2023
我认为是你的问题中的错别字,而不是你的代码?!你希望你的json数据是什么样子的?di

答:

1赞 steev 3/21/2023 #1

在您的代码中,您有一个包含三个索引的调用:、 和 。循环访问文件的每一行,以及每次覆盖这三个索引的值时。 取而代之的是,我们可以制造一辆汽车,每辆汽车都包含这样的.然后,我们可以使用该方法将 cars 数组转换为 JSON 字符串,如下所示:HashmyhashcolorparkingspotcararrayHashJSON.generate

require 'json'

cars = []

File.foreach("textfile") do |line|
  fields = line.split
  car = {}
  car['color'] = fields.first
  car['parkingspot'] = fields[1]
  car['car'] = fields.last
  cars << car
end

puts JSON.generate(cars)

哪个输出[{"color":"Blue","parkingspot":"A","car":"Mustang"},{"color":"Red","parkingspot":"B","car":"Camaro"}]

编辑: 如果您想要将哈希值作为每辆车的钥匙,您可以执行以下操作:Hashparkingspot

require 'json'

cars = {}

File.foreach("textfile") do |line|
  fields = line.split
  car = {}
  car['color'] = fields.first
  car['car'] = fields.last
  cars[fields[1]] = car
end

puts JSON.generate(cars)

哪个输出{"A":{"color":"Blue","car":"Mustang"},"B":{"color":"Red","car":"Camaro"}}

评论

0赞 Jake Statefarm 3/21/2023
谢谢@steev。如何实现这种格式?{“A”:[{“color”:“蓝色”,“car”:“野马”}],“B”:[{“color”:“红色”,“car”:“Camaro”}]}
0赞 steev 3/21/2023
我更新了答案以输出哈希的哈希,但是在您的评论中,您有一个不必要的数组包裹在每辆车的属性周围。