2014-09-18 129 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