programing

Python에서 YAML 파일을 JSON 개체로 변환

newsource 2023. 3. 6. 21:10

Python에서 YAML 파일을 JSON 개체로 변환

YAML 파일을 로드하여 Python JSON 개체로 변환하려면 어떻게 해야 합니까?

YAML 파일은 다음과 같습니다.

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

PyYAML 라이브러리는 이러한 용도로 설계되었습니다.

pip install pyyaml
import yaml
import json
with 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)

주의: PyYAML은 2009년 이전의 YAML 1.1 사양만 지원합니다.
YAML 1.2가 필요한 경우 ruamel.yaml은 옵션입니다.

pip install ruamel.yaml

PyYAML을 사용할 수 있습니다.

pip install PyYAML

ipython 콘솔에서 다음을 수행합니다.

In [1]: import yaml

In [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'}}

Python JSON 오브젝트는 존재하지 않습니다.JSON은 JavaScript에 뿌리를 둔 언어 독립 파일 형식이며 여러 언어로 지원됩니다.

사용하시는 YAML 문서가 2009년 이전 1.1 규격에 준거하고 있는 경우는, 그 외의 회답에 따라 PyYAML 를 사용할 수 있습니다.

YAML을 JSON의 슈퍼셋으로 만든 새로운 YAML 1.2 사양을 사용하는 경우 다음을 사용해야 합니다.저는 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)

그 결과,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는 YAML 1.2를 지원하는 것 외에 많은 PyYAML 버그를 수정하고 있습니다.또한 Py는YAML의load()또, 항상 입력을 완전하게 제어할 수 없는 경우는, 안전하지 않은 것으로 문서화되어 있습니다.PyYAML은 스칼라 번호도 로드합니다.021정수로서17대신21와 같은 스칼라 문자열을 부울값(resp)으로 변환합니다. True,True그리고.False).

python3에서는 pyyaml을 사용할 수 있습니다.

$ pip3 install pyyaml

그런 다음 yaml 파일을 로드하고 json에 덤프합니다.

import yaml, json

with open('./file.yaml') as f:
    print(json.dumps(yaml.load(f)))

출력:

{"Section": null, "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에 근거한 셸 에일리어스를 다음에 나타냅니다.

pip3 install ruamel.yaml
alias yaml2json="python3 -c 'import json, sys, ruamel.yaml as Y; print(json.dumps(Y.YAML(typ=\"safe\").load(sys.stdin), indent=2))'"

사용방법:

yaml2json < foo.yaml > foo.json

언급URL : https://stackoverflow.com/questions/50846431/converting-a-yaml-file-to-json-object-in-python