ruby从一个对象写json文件

Pap*_*nho 2 ruby json object

我收到一个错误expected ':' after property name in object at line 1 column 15,我怎么能摆脱'=>'?当我在to_json方法中用":"替换"=>"时,我收到一个错误syntax error, unexpected ':', expecting =>

require 'json'    
class Province
        attr_accessor :provOrigine, :destination, :total, 
                        :q1, :q2, :q3, :q4

        def initialize(line)
            @provOrigine =  line.split(';').first.split(",").first
            @destination =  line.split(';').at(1).split(',').first
            @q1 = (line.split(';').at(4)).to_i
            @q2 = (line.split(';').at(5)).to_i
            @q3 = (line.split(';').at(6)).to_i
            @q4 = (line.split(';').at(7)).to_i
        end
        def to_json
          {'provOrigine' => @provOrigine.to_s, 'destination' => @destination.to_s, 'q1' => @q1.to_s, 'q2' => @q2.to_s, 'q3' => @q3.to_s, 'q4' => @q4.to_s}
        end


    end
Run Code Online (Sandbox Code Playgroud)

... prov_instances =包含省的所有实例......

File.open("file_json_complete.json", "w") do |f|
  prov_instances.each do |n|
    f.write(n.to_json)
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果

    {"provOrigine"=>"Alberta", "destination"=>"Terre-Neuve-et-Labrador", "q1"=>"777", "q2"=>"1089", "q3"=>"553", "q4"=>"474"}{"provOrigine"=>"Alberta", "destination"=>"Nunavut", "q1"=>"24", "q2"=>"70", "q3"=>"29", "q4"=>"29"}{"provOrigine"=>"Alberta", "destination"=>"Île-du-Prince-Édouard", "q1"=>"116", "q2"=>"69", "q3"=>"150", "q4"=>"64" 
}
Run Code Online (Sandbox Code Playgroud)

并且每个对象之间没有逗号?

Phi*_*rom 10

您需要自己添加逗号. f.write(n.to_json)会写了一个单一的省.它无法知道你会继续写更多并需要逗号.

有没有理由你不能这样做?

File.open('file_json_complete.json', 'w') do |f|
  f.puts prov_instances.to_json
end
Run Code Online (Sandbox Code Playgroud)


Pap*_*nho 5

我需要取散列 {} 并转换它to_json以创建一个json 字符串

       class Province
         def to_json(*a)
           {'provOrigine' => @provOrigine.to_s, 
            'destination' => @destination.to_s, 
            'q1' => @q1.to_s, 'q2' => @q2.to_s, 
            'q3' => @q3.to_s, 'q4' => @q4.to_s
           }.to_json(*a)

         end
       end
Run Code Online (Sandbox Code Playgroud)

我不需要循环思考每个实例。我可以将对象 Array 转换为 to_json

File.open("file_json_complete.json", "w") do |f|
   f.write(prov_instances.to_json)
end
Run Code Online (Sandbox Code Playgroud)