2017-02-14 5 views
2

У меня есть YAML файл, который выглядит следующим образом (с названиями бот и их параметрами):YAML в JSON Рубин

conf_file: 

    pipeline_conf_path: /opt/etc/pipeline.conf 
    runtime_conf_path: /opt/etc/runtime.conf 


    asn_lookup: 
    parameters: 
     database: /opt/var/lib/bots/asn_lookup/ipasnteste.dat 
    group: "Expert" 
    name: "ASN Lookup" 
    module: "one module" 
    description: "modified by " 

    modify: 
    parameters: 
     configuration_path: /opt/var/lib/bots/modify/modify.conf 
    group: "Expert" 
    name: "Modify" 
    module: "one module" 
    description: "modified" 

filter: 
    parameters: 
     filter_action: 
     filter_key: 
     filter_regex: 
     filter_value: 

    group: "Expert" 
    name: "Filter" 
    module: "one module" 
    description: "modified" 

И я хотел бы преобразовать каждый бот JSON. Например, для НВА-Lookup вывод должен быть чем-то вроде:

"asn-lookup": { 
     "parameters": { 
      "database": "/opt/var/lib/bots/asn_lookup/ipasnteste.dat" 
     }, 
     "group": "Expert", 
     "name": "ASN Lookup", 
     "module": "one module", 
     "description": "modified by" 
    } 

У меня уже есть следующий код:

def generate_asn_bot 
    config = YAML.load_file('my_conf.yaml') 
    asn = config["conf_file"]["asn_lookup"] 
    puts JSON.pretty_generate(asn) 
end 

и это дает следующий результат:

{ 
    "parameters": { 
    "database": "/opt/intelmq/var/lib/bots/asn_lookup/ipasnteste.dat" 
    }, 
    "group": "Expert", 
    "name": "ASN Lookup", 
    "module": "intelmq.bots.experts.asn_lookup.expert", 
    "description": "modified by mfelix" 
} 

Но у него отсутствует имя бота. Поэтому я добавил следующую строку кода:

final = asn['name'] = '"asn-lookup"' + ': ' + asn.to_json 

И использовать JSON.pretty_generate(final), но это не работает, выбрасывая ошибку:

only generation of JSON objects or arrays allowed (JSON::GeneratorError)

Что является лучшим способом для преобразования каждого бота в JSON и добавить имя бота в начале его?

+0

Почему вы не просто создать структуру, которую вы хотите сбросить (сделав отображение с помощью клавиши «АСН-поиск"»и значения' asn', а затем сбросить эту структуру вместо жонглирования строкового представления 'asn'? Получаете ли вы сообщение об ошибке? Если да, то что это такое? Почему это не работает? – Anthon

+0

Это очень хорошая идея! Спасибо. Ошибка, которую я получаю, - это всего лишь создание объектов или массивов JSON (JSON :: GeneratorError) ", но это потому, что переменная" final "является строкой. У меня не хватало идей, чтобы решить эту проблему, спасибо за ваше предложение @Anthon – mf370

+0

Если бы я знал любой синтаксис ruby, я бы положите его в ответ ;-). Если вы узнаете, вы можете самостоятельно ответить на свой пост и принять ответ – Anthon

ответ

2
def generate_asn_bot 
    config = YAML.load_file('my_conf.yaml') 
    asn = config["conf_file"]["asn_lookup"] 
    hash = Hash.new 
    hash["asn-lookup"] = asn 
    puts JSON.pretty_generate(hash) 
end 

Просто спас все в Хеш!

0
ruby -ryaml -rjson -e "puts YAML.load_file('my_conf.yaml').to_json" 
Смежные вопросы