Как выполнить итерацию по конфигурации YAML и получить параметры?

#javascript #node.js #configuration #yaml #config

#javascript #node.js #конфигурация #yaml

Вопрос:

У меня есть этот файл конфигурации YAML:

 sheets:
  list1:
    name: 'sheet1'
    sql: 'SELECT'
  list2:
    name: 'sheet2'
    sql: 'SELECT'
  list3:
    name: 'sheet3'
    sql: 'SELECT'
  

Я использую библиотеку 'js-yaml' для разбора конфигурации YAML.
Я хочу, например, чтобы консоль регистрировала все имена списков. Как я могу это сделать? У меня есть что-то подобное в JS:

 for(sheet in config.sheets) {
    console.log(sheet.name);
}
  

когда я делаю это console.log(sheet) в цикле, я получаю list1, list2, list3, но console.log(sheet.name) в цикле не работает.

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

1. Вероятно, зависит от того, какую библиотеку вы используете для анализа YAML. Самый быстрый способ решить проблему, когда у вас «слишком много времени», — это выполнить поиск в Интернете и посмотреть, как другие люди решили ее, а не ждать ответа здесь. Это решаемая проблема.

2. Да, я делаю и то, и другое …. поиск в Google и опрос. Но у меня нет времени на конфигурации, поэтому я могу сделать что-нибудь еще, пока кто-нибудь, возможно, поможет мне там. Библиотека, которую я использую, называется ‘js-yaml’

3. Я не уверен, что понимаю — если вы используете js-yaml, который преобразует файл конфигурации в объект, в чем конкретная проблема? Даже если бы это было непонятно, простое удаление проанализированного документа наверняка дало бы некоторое представление о том, что делать с данными?

Ответ №1:

Вам следует использовать такой инструмент, как js-yaml , чтобы сначала преобразовать ваш yaml в js literal .

 const yaml = require('js-yaml');
let data = yaml.load(config);
  

Он вернет данные следующим образом:

  {
       sheets: {
          list1: {
           name: "sheet1",
           sql: 'SELECT'
        },
......other lists
     }
   }
  

тогда вы можете просто

 const data = {
  sheets: {
    list1: {
      name: "sheet1",
      sql: 'SELECT'
    },
    list2: {
      name: "sheet2",
      sql: 'SELECT'
    }
  }
}

const name = Object.values(data.sheets).map(item => item.name)
console.log(values);