【发布时间】: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