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
'programing' 카테고리의 다른 글
여러 줄의 환경 변수 형식을 적절하게 도커 구성하려면 어떻게 해야 합니까? (0) | 2023.03.06 |
---|---|
새 URL을 푸시할 때 React 구성 요소 렌더가 여러 번 호출됩니다. (0) | 2023.03.06 |
npm 패키지 설치 시 종속성 트리 오류를 해결할 수 없습니다. (0) | 2023.03.06 |
스프링 부트: YAML 파일에서 @Value 로드 (0) | 2023.03.06 |
AngularJS-Twig가 더블컬리브레이트와 경합합니다. (0) | 2023.03.06 |