#node.js #json #object #iterator #fs
#node.js #json #объект #итератор #fs
Вопрос:
Я пытаюсь выполнить итерацию по json-файлу, где это шаблон файла:
[
{
"REF_DATE": 2016,
"GEO": "Canada",
"DGUID": "2016A11124",
"Educational qualification": "Career, technical or professional training certificate",
"Field of study": "Total, field of study",
"Gender": "Total, gender",
"Age group": "15 to 64 years",
"Status of student in Canada": "Canadian and international students",
"Characteristics after graduation": "Graduates reporting employment income",
"Graduate statistics": "Number of graduates",
"UOM": "Number",
"UOM_ID": 223,
"SCALAR_FACTOR": "units",
"SCALAR_ID": 0,
"VECTOR": "v1007923968",
"COORDINATE": "1.2.1.1.1.1.4.1",
"VALUE": 33930,
"STATUS": "",
"SYMBOL": "",
"TERMINATED": "",
"DECIMALS": 0
},
{
"REF_DATE": 2016,
"GEO": "Canada",
"DGUID": "2016A11124",
"Educational qualification": "Career, technical or professional training certificate",
"Field of study": "Education [1]",
"Gender": "Total, gender",
"Age group": "15 to 64 years",
"Status of student in Canada": "Canadian and international students",
"Characteristics after graduation": "Graduates reporting employment income",
"Graduate statistics": "Number of graduates",
"UOM": "Number",
"UOM_ID": 223,
"SCALAR_FACTOR": "units",
"SCALAR_ID": 0,
"VECTOR": "v1007929890",
"COORDINATE": "1.2.2.1.1.1.4.1",
"VALUE": 865,
"STATUS": "",
"SYMBOL": "",
"TERMINATED": "",
"DECIMALS": 0
}
]
В принципе, я хочу просмотреть весь документ и извлечь только определенные элементы («Образовательная квалификация» и «ЦЕННОСТЬ») из этих объектов в массив, если они соответствуют определенным условиям (имеют одинаковую «Область обучения» и «UOM_ID»). Я хочу вернуть этот массив в запросе get api.
В настоящее время у меня есть вспомогательная функция для чтения файла JSON:
function jsonReader(dataAddress, cb) {
fs.readFile(dataAddress, (err, fileData) => {
if (err) {
return cb amp;amp; cb(err);
}
try {
const object = JSON.parse(fileData);
return cb amp;amp; cb(null, object);
} catch (err) {
return cb amp;amp; cb(err);
}
});
}
У меня также есть написанный запрос get, который в настоящее время возвращает весь файл json.
app.get('/income/:job', (req, res)=>{
jsonReader('./data.json', (err, result) => {
if(err){
console.log(err);
} else {
res.send(result);
}
})
});
Могу ли я, пожалуйста, получить некоторую помощь в выполнении этой задачи? Я пробовал просматривать множество видеороликов и форумов YouTube и не могу найти большой помощи. Большое спасибо!
Комментарии:
1. Как выглядит структура данных в файле, это массив объектов или что-то еще?
2. Да, это структура. [ { data }, { data } ]
Ответ №1:
Итак, вам удалось прочитать данные из файла в виде текста, а затем использовать JSON.parse() для преобразования их в объект. Это хорошее начало.
Есть два способа сделать это, вот один, который я использую довольно часто.Вы можете использовать Object.keys( ), чтобы получить список всех имен свойств в вашем объекте. Тогда это просто вопрос создания нового объекта и только копирования в него нужных ключей и свойств из исходного объекта. В этом примере результаты помещаются в новый объект, а не в массив, но использование массива в значительной степени ничем не отличается, если вы не хотите использовать числовые индексы.
var output = {};
var keys = Object.keys(object);
var key = null;
for (key of Keys){
if(key === "MATCHING_PROPERTY_NAME")
if(object[key] === "MATCHING_VALUE")
output[key]= object[key];
}
Комментарии:
1. Спасибо! Я пойду дальше и попробую это.
2. Я надеюсь, что это поможет вам. Поскольку вы новый участник, могу ли я напомнить вам, что если это помогло, пожалуйста, отметьте это соответствующим образом.