Перебор JSON-файла в NodeJS

#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. Я надеюсь, что это поможет вам. Поскольку вы новый участник, могу ли я напомнить вам, что если это помогло, пожалуйста, отметьте это соответствующим образом.