无法使用txt / json文件

时间:2015-08-05 15:50:05

标签: ruby json file hash

我在一家公司实习并得到以下指示:

  

"您将在文本文件(students.json)中找到学生记录 - 一个   学生每行。写一个程序来计算平均成绩   班级。"

有问题的学生档案是扩展名为.txt的要点,这是内容的一个例子:

dataRetrievalService.getContents(function(contents) {
    $scope.result = contents;
});

这是我第一次使用JSON,所以我想我需要将其转换为哈希或其他东西,以便我可以更轻松地处理数据。

我尝试使用以下方法执行此操作:

{"first name": "mary", "last name": "roberts", "grade": 78}
{"first name": "jason", "last name": "mchale", "grade": 82}
{"first name": "ciaron", "last name": "smith", "grade": 63}
{"first name": "sarah", "last name": "johnson", "grade": 91}

但是我得到了错误:

require 'json'

def distance
  file = File.open("students.txt", "r")

  students = ""

  file.each do |line|
    students << line
  end
  file.close

  puts JSON.parse(students)
end

我查看了this question,它表明我实际上并没有JSON,而是一个写为字符串的哈希。不幸的是跑步

JSON::ParserError: 757: unexpected token at '{"first name": "mary", "last name": "roberts", "grade": 78}
{"first name": "jason", "last name": "mchale", "grade": 82}...

只给我第一个学生记录而不是剩下的。我对我实际使用的内容感到有点困惑,是纯文本文件,字符串哈希还是错误文件格式的JSON?如果有人能指出我正确的方向来提取这些数据,那么我可以使用它,我会永远感激!

1 个答案:

答案 0 :(得分:0)

文本的每一行都是有效的JSON,但将它们放在一起,它无效。

您可以将每一行转换为Hash,并将它们连接在一起:

students = []
file.each do |line|
  students << line
end
file.close

students.each {|e| e = JSON.parse(e) }

现在,您可以通过students.to_json获取整个JSON。