代码如下:
import fs = require('fs');
export interface Answer {
order: number,
text: string
}
export class Config {
responses:Answer[];
timestamp_column: string;
name_column: string
fromJSONFile(fileName: string) {
var fileString = fs.readFileSync(fileName);
var parsedFile = JSON.parse(fileString.toString());
this.responses = parsedFile.responses;
this.timestamp_column = parsedFile.timestamp_column;
this.name_column = parsedFile.name_column;
}
mapAnswerToNum(answer:string):number {
for (var a of this.responses) {
if (a.text == answer) { return a.order;}
}
throw new Error(`Invalid response string ${answer}`);
}
}
在这个文件中读:
{
"responses": [
{ "value": 0, "text": "At a loss to explain it..."},
{ "value": 1, "text": "Have a vague sense..."},
{ "value": 2, "text": "Pretty good handle on it..."},
{ "value": 3, "text": "Confident that I understand it..."},
{ "value": 4, "text": "Feel pretty expert at it..."}
],
"timestamp_column": "Timestamp",
"name_column": "First Name"
}
请注意,我正在从fromJSONFile中对应的JSON字段一个接一个地复制每个实例变量。考虑到我小心地确保类的结构与JSON文件完全相同,这似乎是重复的。有没有更好的办法?
使用Object.assign
fromJSONFile(fileName: string) {
var fileString = fs.readFileSync(fileName);
var parsedFile = JSON.parse(fileString.toString());
Object.assign(this,parsedFile);
}