Converting a YAML file to Python JSON object Converting a YAML file to Python JSON object json json

Converting a YAML file to Python JSON object


you can use PyYAML

pip install PyYAML

And in the ipython console:

In [1]: import yamlIn [2]: document = """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"""   ...:     In [3]: yaml.load(document)Out[3]: {'Paragraph': {'font': {'color_theme': 'ACCENT_2',   'name': 'Times New Roman',   'size': 11}}, 'Section': {'font': {'color_theme': 'ACCENT_2',   'name': 'Times New Roman',   'size': 22},  'heading': 'Heading 1'}, 'SubSection': {'font': {'color_theme': 'ACCENT_2',   'name': 'Times New Roman',   'size': 15},  'heading': 'Heading 3'}, 'Table': {'style': 'MediumGrid3-Accent2'}}


The PyYAML library is intended for this purpose

pip install pyyaml
import yamlimport jsonwith open("example.yaml", 'r') as yaml_in, open("example.json", "w") as json_out:    yaml_object = yaml.safe_load(yaml_in) # yaml_object will be a list or a dict    json.dump(yaml_object, json_out)

Notes: PyYAML only supports the pre-2009, YAML 1.1 specification.
ruamel.yaml is an option if YAML 1.2 is required.

pip install ruamel.yaml


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.yamlimport jsonin_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).