我正在尝试将shell任务输出写入json,但存在将其解析为有效的一个json文件的问题。
这是shell任务输出的示例:
{"firstname": "John", "lastname": "Smith", "user": "john"}
- name: 'Execute script'
shell: /tmp/script.sh
register: script_output
- name: 'Output to json'
local_action:
module: lineinfile
dest: output.json
line: '{{ script_output.stdout }}'
create: yes
在执行剧本之后,json文件具有以下内容:
{"firstname": "John", "lastname": "Smith", "user": "john"}
{"firstname": "John", "lastname": "Smith", "user": "john"}
{"firstname": "John", "lastname": "Smith", "user": "john"}
如何以附件中的json有效格式格式化输出?
[
{"firstname": "John", "lastname": "Smith", "user": "john"},
{"firstname": "John", "lastname": "Smith", "user": "john"},
{"firstname": "John", "lastname": "Smith", "user": "john"}
]
答案 0 :(得分:0)
没有可解决的json module
。但是您可以为此使用第三方模块,例如ansible-jsonpatch。
答案 1 :(得分:0)
这是一个简单的情况,您可以使用@JGK答复的内容,也可以只定义一个列表并将这些json元素添加到其中。没有任何模块!
即:
- vars:
elem:
- {"firstname": "John", "lastname": "Smith", "user": "john"}
- {"firstname": "John", "lastname": "Smith", "user": "john"}
- {"firstname": "John", "lastname": "Smith", "user": "john"}
- set_fact:
my_list: []
- name: add to list
set_fact:
my_list: "{{ my_list + [item] }}"
loop: "{{ elem }}"
- debug:
msg: "{{ my_list }}"
- copy:
content: "{{ my_list }}"
dest: ./x.json
delegate_to: localhost
这是使用json python模块或jq验证的结果:
$ jq . x.json
[
{
"lastname": "Smith",
"user": "john",
"firstname": "John"
},
{
"lastname": "Smith",
"user": "john",
"firstname": "John"
},
{
"lastname": "Smith",
"user": "john",
"firstname": "John"
}
]
Python:
$ python -m json.tool x.json
[
{
"firstname": "John",
"lastname": "Smith",
"user": "john"
},
{
"firstname": "John",
"lastname": "Smith",
"user": "john"
},
{
"firstname": "John",
"lastname": "Smith",
"user": "john"
}
]