2014-09-18 196 views
1

我收到错误expected ':' after property name in object at line 1 column 15我该如何摆脱'=>'?当我更换 “=>” 本经 “:” 在to_json方法,我得到一个错误syntax error, unexpected ':', expecting =>ruby​​从对象中写入json文件

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 

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

File.open("file_json_complete.json", "w") do |f| 
    prov_instances.each do |n| 
    f.write(n.to_json) 
    end 
end 

这是我得到的结果

{"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" 
} 

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

回答

7

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

有没有原因,你不能这样做呢?

File.open('file_json_complete.json', 'w') do |f| 
    f.puts prov_instances.to_json 
end 
+0

感谢菲利普,但你的答案的输出为'“#<省:0x8c40f10>”,“#<省:0x8c352dc>”'这看来我真的需要在方法to_json中追加'.to_json(* a)' – 2014-09-18 23:56:38

3

我需要采取哈希{}然后将其丢在to_json为了创建json string

 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 

我并不需要循环以为每个实例。我可以把对象数组,并投它to_json

File.open("file_json_complete.json", "w") do |f| 
    f.write(prov_instances.to_json) 
end