There is no such thing as a Python JSON object. JSON is a language independent file format that finds its roots in JavaScript, and is supported by many languages.
If your YAML document adheres to the old 1.1 standard, i.e. pre-2009, you can use PyYAML as suggested by some of the other answers.
If it uses the newer YAML 1.2 specification, which made YAML into a superset of JSON, you should use ruamel.yaml
(disclaimer: I am the author of that package, which is a fork of PyYAML).
import ruamel.yaml
import json
in_file = 'input.yaml'
out_file = 'output.json'
yaml = ruamel.yaml.YAML(typ='safe')
with open(in_file) as fpi:
data = yaml.load(fpi)
with open(out_file, 'w') as fpo:
json.dump(data, fpo, indent=2)
which generates output.json
:
{
"Section": {
"heading": "Heading 1",
"font": {
"name": "Times New Roman",
"size": 22,
"color_theme": "ACCENT_2"
}
},
"SubSection": {
"heading": "Heading 3",
"font": {
"name": "Times New Roman",
"size": 15,
"color_theme": "ACCENT_2"
}
},
"Paragraph": {
"font": {
"name": "Times New Roman",
"size": 11,
"color_theme": "ACCENT_2"
}
},
"Table": {
"style": "MediumGrid3-Accent2"
}
}
ruamel.yaml
, apart from supporting YAML 1.2, has many PyYAML bugs fixed. You should also note that PyYAML's load()
is also documented to be unsafe, if you don't have full control over the input at all times. PyYAML also loads scalar numbers 021
as integer 17
instead of 21
and converts scalar strings like on
, yes
, off
to boolean values (resp. True
, True
and False
).