Here is the Ansible playbook yaml_to_json.yml (in a real world example the names of the files would probably be parameterized).
---
- hosts: localhost
tasks:
- shell: cat my.yaml
register: result
- set_fact:
myvar: "{{ result.stdout | from_yaml | to_json }}"
- copy:
content: "{{ myvar }}"
dest: my.json
Here is an example of a yaml input file which contains some special characters, lists, strings, numbers etc.
---
xx:
- a:
- b:
A: aadf7{fdfd"öög
B: [ 'asdfadsf*5%@@@"masdf' , 123456 ]
yy:
n:
C: 'AAdf7{fdfd"öög'
D: [ 'ASdfadsf*5%@@@"masdf' , 789.56 ]
m:
When run via ansible-playbook yaml_to_json.yml the
JSON output file below (run via jq .) is generated.
{
"yy": {
"m": null,
"n": {
"C": "AAdf7{fdfd\"\\u00f6\\u00f6g",
"D": [
"ASdfadsf*5%@@@\"masdf",
789.56
]
}
},
"xx": [
{
"a": null
},
{
"b": {
"A": "aadf7{fdfd\"\\u00f6\\u00f6g",
"B": [
"asdfadsf*5%@@@\"masdf",
123456
]
}
}
]
}
Note how lists and dictionaries and special characters are put into the resp. JSON format.
Also note that I am using the Ansible copy module.
A shell: echo "{{ myvar }}" > my.json does not work since it does not take care of the correct quote and special characters subsitutions.