Какой лучший способ записи данных в файлы JSON?

#javascript #json #typescript #loops

#javascript #json #typescript #циклы

Вопрос:

Итак, я написал скрипт для сохранения данных из моего проекта в файлы JSON, но мне сказали, что это неуклюже. По сути, я просто написал три почти идентичных метода записи файлов как таковых:

 var fs = require('fs');
fs.writeFile('public/game-data.json', JSON.stringify(getGameData()), (e: any) => {
    if(e){
        console.error(e);
        return;
    };
    console.log("Saved game data to game-data.json.");
});

fs.writeFile('public/shop-items.json', JSON.stringify(getShopData()), (e: any) => {
    if(e){
        console.error(e);
        return;
    };
    console.log("Saved shop data to shop-data.json.");
});

fs.writeFile('public/hash.json', JSON.stringify(getHashData()), (e: any) => {
    if(e){
        console.error(e);
        return;
    };
    console.log("Saved hash data to hash.json.");
});
  

Мне рекомендовали использовать цикл и «надежную функцию» (нигде не могу найти определение этого)… У кого-нибудь есть какие-либо рекомендации?

Комментарии:

1. Вы должны вернуться к человеку, который вам это сказал, и спросить его.

2. Создайте функцию, которая принимает data и fileName , затем реорганизует все три функции, чтобы они вызывались как myWritFile(getGameData(), 'game-data.json') ?

3. Представьте, что вы пишете функцию, writeData , которую вы вызываете следующим образом: writeData('game', 'game-data.json', getGameData()) , затем writeData('shop', 'shop-items.json', getShopData()) , и снова для хэша. Как бы вы это написали?

4. Я бы не сказал, что неуклюжий. Он повторяющийся, но не неуклюжий. Я искал надежную функцию, так как я всегда хочу узнать что-то новое, и я тоже не могу найти никакого объяснения.

Ответ №1:

Единственное, о чем я могу думать, это:

 var fs = require('fs');

function saveJSON(file, data, type) {
  fs.writeFile(file, JSON.stringify(data), (e: any) => {
    if (e) {
      console.error(e);
      return;
    };
    console.log("Saved "   type   " data to "   file);
  });
}

saveJSON('public/game-data.json', getGameData(), 'game');
  

Комментарии:

1. Я бы предложил еще один параметр для вывода журнала, который может быть передан "game" , "shop" , или "hash"

2. Это потрясающее решение, спасибо!! Я новичок в программировании и все еще привыкаю к логике.

Ответ №2:

Немного другой подход (не тестировался, и я не знаю Typescript, так что это может быть немного хитроумно):

 var fs = require('fs');

const console_callback = (message: string) => (e: any) =>
    e ? console.error(e) : console.log(message);

fs.writeFile(
    'public/game-data.json',
    JSON.stringify(getGameData()),
    console_callback("Saved game data to game-data.json.")
);