2012-10-23 75 views
3

我有一個工作方法,可以打開並解析json文件。現在我試圖遍歷json文件的目錄並顯示它們的內容。Ruby json解析錯誤:意外的令牌

工作方法單個文件:

def aperson 
    File.open("people/Elvis Presley.json") do |f| 
    parse = JSON.parse(f.read) 
    end 
end 

非工作方法,通過目錄遍歷:

16. def list 
17. Dir.glob('people/*').each do |f| 
18.  parse = JSON.parse(f) 
19 end 
20. end 

我的錯誤是:

/Users/ad/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/json/common.rb:148:in `parse': 743: unexpected token at 'people/Elvis Presley.json' (JSON::ParserError) 
    from /Users/ad/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/json/common.rb:148:in `parse' 
    from app.rb:18:in `block in list' 
    from app.rb:17:in `each' 
    from app.rb:17:in `list' 
    from app.rb:24:in `<main>' 

所有文件在目錄中具有相同的內容,並且按照JSONlint的值。

任何幫助將不勝感激。

回答

8

您試圖解析爲JSON,這是行不通的。

相反,你需要首先讀取文件:

parse = JSON.parse(File.read(f)) 
+1

謝謝,而不是獲取每個文件的內容我得到的文件列表:人/安東尼DeFreitas.json 人/埃爾維斯Presley.json 人/ Seth Godin.json 人/ Steve McQueen.json – Anthony

+1

嗯,你需要*用'parse'的結果做一些事*。否則,你只要從'Dir.glob'(這是文件名列表)得到結果。也許你想將解析的數據追加到列表中? – nneonneo

+0

謝謝,我想我寫錯了代碼,因爲我想顯示每個文件的內容而不僅僅是文件名。感謝您的幫助nneonneo。 – Anthony

3

不知道,但你可以嘗試解析文件,而不是文件名的內容:

parse = JSON.parse(File.read f) 
+0

「people /#{f}」'不存在; 'f'已經包含擴展的文件名。但是,他試圖讀取文件名而不是文件內容。 – willglynn

+2

您的修改解決方案與不起作用的代碼完全相同。 – willglynn

+0

我的目標是閱讀每個文件的內容,抱歉沒有明確說明。 – Anthony

1

在你不工作的代碼,f是擴展文件名的只是字符串。因此,您需要在塊中收到文件名後讀取文件。

寫它時,@ nneonneo已經給你解決方案。所以我不再給。

相關問題