我在一家公司实习并得到以下指示:
"您将在文本文件(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?如果有人能指出我正确的方向来提取这些数据,那么我可以使用它,我会永远感激!
答案 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。