2016-11-14 8 views
0

ハッシュからファイルにデータを保存しようとしています。私はJSONdumpにファイルに変換します。 私はJSONファイルにハッシュを変換するJSON::ParserErrorJSONとRubyのハッシュ、またはその逆のファイル - パーサーエラー

コードを取得ハッシュするバックファイルから解析しようとすると:それは見えファイルへのいずれかでいくつかの値1を追加した後

user = {:email => "[email protected]", :passwrd => "hardPASSw0r|)"} 

student_file = File.open("students.txt", "a+") do |f| 
     f.write JSON.dump(user) 
end 

を(正常に動作します)このような何か:

{"email":"[email protected]","passwrd":"qwert123"}{"email":"[email protected]","passwrd":"qwert12345"}{"email":"[email protected]","passwrd":"hardPASSw0r|)"} 

私は戻って、ハッシュに変換するには、次のコードを試してみましたが、それは動作しません:

file = File.read('students.txt') 
data_hash = JSON.parse(file) 

私は私の目標は、ファイルから値を追加および削除することができることです

System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/json/common.rb:155:in `parse': 757: unexpected token at '{"email":"[email protected]","passwrd":"qwert12345"}{"email":"[email protected]","passwrd":"hardPASSw0r|)"}' (JSON::ParserError) 
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/json/common.rb:155:in `parse' 
    from hash_json.rb:25:in `<main>' 

を取得します。 私のミスはどこで修正できますか?ありがとうございました。

+1

あなたは別のjsonオブジェクトを追加するために 'a +'でファイルを書きます。それはあなたが必要とするものですか?あなたは追加なしで書くことができますか? – Aleksey

+0

@Aleksey私は '+ a' noを使う必要はありません。その場合、ソリューションはどのようになりますか? – Airwavezx

答えて

1

これは動作するはずです:

https://repl.it/EXGl/0

# as adviced by @EricDuminil, on some envs you need to include 'json' too 
require 'json' 

user = {:email => "[email protected]", :passwrd => "hardPASSw0r|)"} 

student_file = File.open("students.txt", "w") do |f| 
    f.write(user.to_json) 
end 

file = File.read('students.txt') 

puts "saved content is: #{JSON.parse(file)}" 

P.S.これがほんの一例であることを願って、決してプレーンテキストでパスワードを保存しないでください! NEVER ;-)

+0

はい。あなたの環境に応じて、 '' json''を最初に実行したいかもしれません。 –

+0

正しい@EricDuminil - 自分の提案を自分のコードスニペットに追加します。ありがとう。 – damoiser

関連する問題