2012-10-23 57 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已经给你解决方案。所以我不再给。

相关问题