【问题标题】:YAML to JSON RubyYAML 到 JSON 红宝石
【发布时间】:2017-07-02 18:55:10
【问题描述】:

我有一个如下所示的 YAML 文件(带有机器人名称及其参数):

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。例如对于 asn-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),但它不起作用,抛出错误:

只允许生成 JSON 对象或数组 (JSON::GeneratorError)

将每个机器人转换为 JSON 并在其开头添加机器人名称的最佳方法是什么?

【问题讨论】:

  • 为什么不直接创建要转储的结构(通过使用键 '"asn-lookup"' 和值 asn 进行映射,然后转储该结构而不是杂耍字符串asn 的表示?您收到错误消息吗?如果是,那是什么?为什么不起作用?
  • 这是个好主意!谢谢你。我得到的错误是“只允许生成 JSON 对象或数组(JSON::GeneratorError)”,但这是因为变量“final”是一个字符串。我没有办法解决这个问题,谢谢你建议@Anthon
  • 如果我知道任何 ruby​​ 语法,我会把它放在答案中;-)。如果你发现了,你可以自行回答你的帖子并接受答案
  • 这就是我所做的,非常感谢你:) @Anthon

标签: json ruby yaml


【解决方案1】:
ruby -ryaml -rjson -e "puts YAML.load_file('my_conf.yaml').to_json"

【讨论】:

    【解决方案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
    

    刚刚将所有内容保存到哈希中!

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      相关资源
      最近更新 更多