我正在尝试将JSON合并到YAML文件中。
YAML看起来像这样:
filebeat.inputs:
- type: log
<incorporate here with a single level indent>
enabled: true
paths:
假设您具有以下变量:
a = { processors: { drop_event: { when: { or: [ {equals: { status: 500 }},{equals: { status: -1 }}]}}}}
我想将其合并到现有的YAML中。
我尝试使用:
JSON.parse((a).to_json).to_yaml
应用此方法后,我得到了一个有效的YAML,但没有缩进(必须缩进所有行),并带有“ ---”,这是Ruby在YAML中的新文档。
结果:
filebeat.inputs:
- type: log
---
processors:
drop_event:
when:
or:
- equals:
status: 500
- equals:
status: -1
enabled: true
我正在寻找的结果:
filebeat.inputs:
- type: log
processors:
drop_event:
when:
or:
- equals:
status: 500
- equals:
status: -1
enabled: true```
答案 0 :(得分:2)
通过合并散列来生成有效的红宝石对象,然后然后将结果序列化为YAML比反之容易。
@RestController
public class EventController {
@Autowired
EventProducer eventstream;
@RequestMapping("/person/api/events")
public PersonEvents feed(@RequestParam(value="last", required = false) Integer last) {
if(last == null) last = 0;
return eventstream.from(last);
}
}
结果:
puts(yaml.map do |hash|
hash.each_with_object({}) do |(k, v), acc|
# the trick: we insert before "enabled" key
acc.merge!(JSON.parse(a.to_json)) if k == "enabled"
# regular assignment for all hash elements
acc[k] = v
end
end.to_yaml)
---
- type: log
processors:
drop_event:
when:
or:
- equals:
status: 500
- equals:
status: -1
enabled: true
基本上将符号转换为字符串。
答案 1 :(得分:-1)
首先,您需要将原始的YAML转换为JSON
make
然后,您必须将original = YAML.load(File.read(File.join('...', 'filebeat.inputs')))
# => [
{
"type": "log",
"enabled": true,
"paths": null
}
]
合并到此JSON
变量中
original