Command Palette

Search for a command to run...

YAML을 JSON으로: 데이터 손실 없이 매니페스트, 파일 작성 및 파이프라인을 변환합니다

YAML을 JSON으로: 데이터 손실 없이 매니페스트, 파일 작성 및 파이프라인을 변환합니다

T
Toolz Team
|Aug 23, 2026|17 최소 읽기

데이터 도구 모음의 일부

나는 작년에 오후에 동료가 맹세 한 Helm 값 파일을 디버깅하는 데 보냈습니다. 모든 키가 올바르게 보였습니다. 서비스는 시작을 거부했습니다. 범인은 네 명의 문자로 밝혀졌습니다: NO 지역 목록에서 인용되지 않은 국가 코드로 YAML 파서는 이를 부울로 읽습니다 false, 렌더링된 템플릿입니다 false 헤더로,그리고 요구는 YAML 도 노르웨이도 언급하지 않은 오류 메시지와 함께 다운스트림 거부되었습니다. 그 버그는 이름을 가질만큼 유명하다 - 노르웨이 문제 - 그리고 그것은 단지 우리 중 대부분은 "JSON 으로 취급하는 형식으로 기다리는 놀라움의 가족 중 하나입니다 더 멋진 공백."

TL;DR: X-1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 1000 X 10 YAML-JSON 변환기 YAML 문서를 구문 분석하고 이에 상응하는 JSON 을 인쇄하여 앵커,별칭, 병합 키 및 블록 스칼라를 해결하는 중입니다. JSON 으로 구성을 보면 해당 해석이 클러스터에 도달하기 전에 파서가 값이 의미하는 바를 정확히 결정했는지 - 어떤 유형을 추론했는지,어떤 참조를 확장했는지 - 보여줍니다. 브라우저에서 완전히 실행됩니다.

YAML 을 JSON 으로 변환하는 것은 형식 변경일 뿐만 아니라 구성에 실제로 포함된 내용에 대한 가장 빠른 감사입니다. JSON 에는 주석도 없고 앵커도 없으며 구문에 명시되는 것 이상의 암시적 입력도 없으므로 매니페스트의 JSON 보기는 해결되고 모호하지 않은 버전입니다. 이 가이드에서는 YAML 이 JSON 에 매핑되는 방법,실제 인시던트를 유발하는 유형 및 참조 동작,구성 디버깅,매니페스트에 대한 스크립팅 또는 테스트 픽스처 작성 시 변환기를 사용하는 방법을 다룹니다.

YAML 을 JSON 으로 변환하는 것은 실제로 무엇을합니까?

관계는 부수적인 것이 아니라 정의됩니다: YAML 1.2 사양 YAML 은 JSON 의 수퍼세트이므로 모든 JSON 문서는 이미 유효한 YAML 이라고 명시합니다. YAML 과 JSON 은 동일한 세 가지를 설명합니다: 키의 값,순서화된 시퀀스 및 스칼라에 대한 매핑. 변환은 YAML 문서를 걷고 JSON 등가물의 각 구성을 방출합니다. 블록 매핑은 객체가 됩니다. 블록 시퀀스는 배열이 됩니다. 스칼라는 YAML 코어 스키마가 해결하는 방법에 따라 문자열,숫자, 부울 또는 null 이 됩니다.

구조적인 부분은 기계적이기 때문에 흥미롭지 않습니다. 흥미로운 부분은 YAML 이 JSON 이 표현할 수 없는 모든 것입니다. 왜냐하면 변환기가 여러분을 대신하여 결정을 내려야 하는 곳이기 때문입니다:

YAML 기능 JSON이 얻는 것 왜 중요한가
댓글 (# ...) 떨어졌다 JSON에는 주석 구문이 없습니다; 구성의 문서가 남아 있지 않습니다
앵커 및 별칭(&base, *base) 확장된 사본 JSON에는 참조 구문이 없으므로 공유 블록이 중복됩니다
키 병합(<<: *base) 물체에 납작하게 명시적 키는 병합 키 사양에 따라 병합된 키를 재정의합니다
스칼라 차단(` , &gt;`) 이스케이프가 있는 단일 문자열입니다
여러 문서(---) 문서 배열 쿠버네티스 번들은 JSON 배열이 되는데, 자원당 하나의 요소이다
암시적 타이핑 해결된 유형 인용되지 않은 8080 숫자가 됩니다 true 부울, null

그 마지막 행은 응시할 가치가 있는 행입니다. JSON 은 구문을 통해 모든 값을 강제로 유형을 선언합니다: quotes 는 문자열을 의미하고 맨 자릿수는 숫자를 의미합니다. YAML 은 텍스트의 모양에서 유형을 추론합니다. JSON 으로 변환하면 추론을 볼 수 있습니다. 버전 문자열을 예상하고 JSON 이 당신을 보여줍니다 1.1 YAML이 말한 곳 1.10, 그렇지 않았다면 배송했을 버그를 발견했습니다.

YAML&#39;s 암시적 타이핑이 실제 정전을 일으키는 이유

YAML 1,2 코어 스키마는 패턴별로 인용되지 않은 스칼라를 해결합니다. 자릿수는 정수가 됩니다. 소수점이나 지수가 있는 자릿수는 floats 가 됩니다. true 그리고 false 부울이 되세요. null 그리고 ~ null 이 됩니다. 나머지는 모두 문자열입니다.

그것은 한 유형처럼 보이고 다른 유형으로 의미되는 값을 만날 때까지 깔끔하게 들립니다:

  • 포트 및 ID. port: 08080 는 8080 이라는 숫자가 아니다. 앞에 오는 0 은 핵심 스키마 아래에서 잘못된 정수가 되기 때문에 대부분의 파서는 문자열을 되돌려주고,일부 오래된 파서는 8 진수로 해석한다. 우편번호,전화번호, 앞에 오는 0 이 있는 계정 ID 도 같은 문제를 가진다.
  • 버전. version: 1.10 는 플로트 1.1. 후행 제로는 사라졌고,어떤 파서도 경고하지 않습니다. 컨테이너 태그와 비교하면 조회가 실패합니다.
  • 국가 및 언어 코드. YAML 1.1에서는 PyYAML이 많은 Ruby 및 이전 Java 툴링과 함께 기본적으로 계속 따릅니다 y, n, yes, no, on, 그리고 off 부울입니다. NO, ON, 그리고 NA 현실 세계에서는 완벽하게 평범한 두 글자 코드입니다.
  • 시간과 60대. YAML 1.1도 구문 분석합니다 12:30 750인 60진수로서 Cron과 같거나 기간과 같은 문자열은 정수로 사라질 수 있습니다.

이들 각각은 구문 분석 오류가 아닌 무음 데이터 손상입니다. 문서가 유효하고 파이프라인이 녹색이며 값이 잘못되었습니다. The converter&#39;s 문자열을 유지하세요 옵션은 정확히 이 클래스의 조사를 위해 존재합니다: 스위치를 켜고 모든 일반 스칼라가 문자열로 돌아오므로 두 변환을 나란히 비교하고 파서가 재해석한 값을 정확하게 확인할 수 있습니다. 해당 옵션 없이 JSON이 보여주는 것은 무엇이든 현재 프로덕션 파서가 수행할 가능성이 가장 높습니다.

소스 YAML의 수정 사항은 항상 동일합니다: 의미가 텍스트인 모든 것을 인용하세요. port: "8080", version: "1.10", region: "NO". 인용은 비용이 들지 않으며 버그의 전체 범주를 제거합니다. 작성하지 않고 JSON 에서 YAML 을 생성하는 경우,the JSON-YAML 변환기 모호한 값에 대해 자동으로 인용을 적용합니다.

앵커, 별칭 및 병합 키가 변환되는 방법

앵커는 YAML&#39;s 반복에 대한 답입니다. 당신은 로 노드를 표시합니다 &name그리고 나중에 참고하세요 *name:

defaults: &defaults
  restartPolicy: Always
  terminationGracePeriodSeconds: 30

web:
  <<: *defaults
  replicas: 3

worker:
  <<: *defaults
  terminationGracePeriodSeconds: 120

JSON 은 &quot;the same value as over there.&quot; 그래서 변환기는 모든 참조를 전체 복사본으로 확장합니다. 위의 출력은 각각 자신의 것을 가지고 있는 세 개의 객체가 됩니다 restartPolicy그리고 JSON 은 그것을 생산한 YAML 보다 더 길다. 그것은 변환의 결함이 아니다 - 그것은 YAML 이 의미하는 바,쓰여진 것이다.

병합 키 << 우선 순위 규칙이 거꾸로 가져오기 쉽기 때문에 자체 메모를 받을 자격이 있습니다. 자식 매핑에 명시적으로 작성된 키는 병합으로 가져온 키를 이깁니다. 예제에서는 worker 병합 라인이 명시적 키 위에 나타나든 아래에 나타나든 관계없이 30 이 아닌 120 의 유예 기간이 끝납니다. 변환기는 해당 규칙을 구현하므로 JSON 은 효과적인 병합 후 구성을 보여줍니다. 이는 일반적으로 실제로 검사하고 싶었던 것입니다.

두 가지 실용적인 용도가 이로부터 이어집니다. 첫째,config 가 무거운 앵커링을 사용할 때,JSON 으로 변환하는 것이 &quot;what does this environment actually resolve to?&quot; deploy 를 실행하지 않고 대답하는 가장 빠른 방법입니다. 둘째,별칭에 일치하는 앵커가 없는 경우 - 하나의 큰 파일을 여러 개로 분할하는 일반적인 결과 - 변환기는 묵묵히 null 을 생성하는 것이 아니라 줄 번호로 오류로 보고합니다.

블록 스칼라가 변환하는 방법

YAML은 다중 라인 텍스트를 임베드하는 두 가지 방법을 가지고 있으며, 그들은 다르게 동작합니다:

  • 문자 그대로 (|) 모든 줄 바꿈을 작성된 대로 정확하게 유지합니다. 셸 스크립트,PEM 인증서,SQL 및 공백에 민감한 모든 항목에 사용합니다.
  • 접힌 (>) 연속된 줄을 공백 하나로 조인하고 빈 줄을 단락 나누기로 처리합니다. 소스 파일로 감싸고 싶지만 값으로 조인한 산문에는 사용하십시오.

둘 다 후행 개행 문자를 제어하는 chomping 표시기를 허용합니다. 클리핑이라고 하는 기본값은 정확히 하나의 후행 개행 문자를 유지합니다. A 빼기 (|-) 모든 후행 개행 문자를 제거합니다. A plus (|+)는 그들 모두를 유지합니다.

JSON에서는 이 모든 것이 하나의 문자열로 축소됩니다 \n 이스케이프. 그것은 JSON 뷰가 유용한 또 다른 이유입니다: 그것은 모호하지 않습니다. A | 마지막 줄이 실수로 들여쓰기된 블록 또는 a > 분리하려고 했던 두 줄을 접어서 연결하는 블록은 JSON에서는 분명하고 YAML에서는 거의 보이지 않습니다. 변환기는 순진한 구현을 포착하는 경우도 처리합니다 # 리터럴 블록 안의 문자는 코멘트가 아니라 콘텐츠입니다. 이는 셰뱅으로 시작하는 셸 스크립트를 삽입하는 순간 중요합니다.

YAML to JSON Converter 를 사용하는 방법

1 단계: 문서를 붙여 넣습니다

입력 패널에 YAML을 붙여넣습니다: Kubernetes 매니페스트, a docker-compose.yml, GitHub Actions 워크플로, Ansible 플레이북, a .gitlab-ci.yml또는 애플리케이션 구성입니다. 다중 문서 파일 --- 구분 기호는 괜찮습니다 - 각 문서는 독립적으로 구문 분석됩니다. 클릭 샘플 로드 중첩된 맵, 시퀀스, 빈 컬렉션 및 리터럴 블록 스칼라를 실행하는 현실적인 배포에서 시작합니다.

구문 분석하지 않을 한 가지는 탭 문자로 들여쓰기입니다. YAML 은 탭을 완전히 금지하고 변환기는 추측보다는 문제가되는 줄 번호로 그렇게 말합니다. Enter 에 탭을 삽입하는 편집자는 일반적인 소스입니다; 대부분은 &quot; 들여쓰기를 spaces&quot 로 변환; 전체 파일을 한 번에 수정하는 명령입니다.

2 단계: 출력 모양을 선택합니다

골라내다 2 개의 공간, 4 개의 공간, 또는 축소되었습니다. minified 는 결과를 a 에 붙여 넣으려고 할 때 원하는 것입니다 curl body 또는 환경 변수. 들여쓰기된 출력은 인간이 읽어야 할 때 원하는 것입니다.

키 정렬 모든 레벨에서 알파벳순으로 개체 키를 다시 작성합니다. 이것은 config 의 두 버전을 비교할 때 매우 중요합니다: 키 순서만 다른 두 파일은 동일한 정렬된 JSON 을 생성하므로 diff 는 실제 변경 사항만 표시합니다. 두 출력을 모두 에 공급합니다 JSON 차이점 도구를 사용하면 한 줄씩 비교하는 대신 정확한 구조적 비교를 얻을 수 있습니다.

문자열을 유지하세요 위에서 설명한 대로 스칼라 강제 기능을 비활성화합니다. 모든 값의 원시 텍스트를 보고 싶을 때나 어쨌든 다운스트림 소비자가 모든 것을 문자열로 처리할 때 사용합니다.

3 단계: 오류를 변환하고 읽습니다

클릭 개종시키다. 문서가 잘 구성된 경우 JSON은 줄 수, 키 수, 바이트 크기 및 - 다중 문서 스트림의 경우 - 발견된 문서 수와 함께 아래에 표시됩니다.

잘 형성되지 않은 경우 오류는 줄 이름을 지정합니다. 메시지는 실제로 실제로 발생하는 실패를 다룹니다: 들여쓰기에 사용되는 탭, 형제와 일치하지 않게 들여쓰기된 줄, 종료되지 않은 인용 문자열, 앵커가 없는 별칭, 매핑이 아닌 것을 가리키는 병합 키 줄 번호는 5분 사냥을 5초 수정으로 바꿉니다.

4 단계: 복사, 다운로드 또는 계속 진행

JSON을 클립보드에 복사하거나 다운로드하세요 .json 파일. 거기에서 일반적인 다음 단계는 예쁜 인쇄 및 유효성 검사입니다 JSON 포맷터, 구성 로더에 대한 유형을 생성합니다 JSON에서 타이프스크립트또는 CI 검증을 위한 계약을 도출합니다 JSON 스키마 생성기.

이것이 맞는 실제 워크플로우

&quot;looks fine&quot; 매니페스트 디버깅

배포가 예기치 않게 동작하고 YAML 이 올바르게 읽으면 변환합니다. JSON 은 10 번 중 9 번 문제를 즉시 보여줍니다: 부울이 된 값,길 잃은 공간 때문에 의도한 것보다 한 단계 얕은 중첩 키,부실한 것으로 확장된 앵커 JSON 보기는 버그를 보이지 않게 만든 공백 모호성을 제거합니다.

구성에 대한 스크립팅

쉘 및 노드 스크립트는 기본적으로 JSON 을 처리합니다; YAML 은 종속성이 필요합니다. 매니페스트 묶음에서 모든 이미지 태그를 꺼내야 할 때 먼저 JSON 으로 변환하고 파이핑을 통해 전환합니다 jq 는 버리는 스크립트에 YAML 라이브러리를 추가하는 것보다 빠릅니다. 여기서 컨버터&#39;s 다중 문서 지원이 중요합니다 - 여섯 개의 리소스로 구성된 쿠버네티스 번들은 반복할 수 있는 JSON 배열이 됩니다.

건물 시험 정착물

통합 테스트는 종종 config 파일이 아닌 config 객체를 필요로 합니다. 실제 매니페스트를 JSON 으로 변환하면 프로덕션 모양과 일치하도록 보장되는 픽스처를 얻을 수 있으며,이는 메모리에서 입력한 객체보다 훨씬 더 나은 시작점과 페어링됩니다 JSON에서 타이프스크립트 그리고 당신의 정착물은 유형으로 옵니다.

풀 요청에서 구성 검토

앵커로 한 줄 변경하면 모든 소비자가 조용히 변경되기 때문에 무겁게 고정된 YAML의 차이는 읽기 어렵습니다. 두 버전을 모두 변환합니다 키 정렬 JSON을 활성화하고 차이화하면 실제 폭발 반경이 표시됩니다: 편집된 선뿐만 아니라 변경된 모든 해결된 값입니다.

도구 간 마이그레이션

플랫폼의 많음은 JSON 을 받아들이지만 YAML 은 받아들이지 않거나,그 반대도 마찬가지다. 변환은 보통 전체 마이그레이션이다. 반대로 돌아가야 할 때 - JSON 을 손에 들고,YAML 이 요구된다 - the JSON-YAML 변환기 루프를 닫습니다 야엘 검증인 커밋하기 전에 결과 구문 분석을 확인합니다.

YAML과 JSON을 비교했습니다

치수 JSON
코멘트 아니요
인간 편집 들여쓰기 기반, 쉽게 훑어볼 수 있습니다 구두점이 많고 장황합니다
기계 구문 분석 더 느리고, 더 큰 파서, 더 많은 엣지 케이스 빠르고 작은 파서가 곳곳에 있습니다
유형 추론 암시적, 스키마 종속적 구문에서 명시적으로
참고자료 앵커, 별칭, 키 병합 없음
파일당 여러 문서 네, 경유해서요 --- 아니요
전형적인 집 파일 구성, CI 파이프라인, 매니페스트 API, 데이터 교환, 스토리지

YAML 1,2 는 형식적으로 JSON 의 상위 집합이므로 모든 JSON 문서는 이미 유효한 YAML 입니다. 그 반대는 사실이 아니기 때문에 YAML 을 JSON 으로 변환하는 것은 정확히 한 방향으로 손실 작업입니다: 주석과 참조 구조는 폐기되지만 데이터는 보존됩니다. YAML 에 관심이있는 주석이 있으면 YAML 을 진실의 근원으로 유지하고 JSON 을 파생 아티팩트로 취급하십시오.

개인 정보 보호: 이것이 브라우저에서 실행되는 이유

Config 파일은 팀이 가지고 있는 가장 민감한 일반 텍스트 아티팩트 중 하나입니다. 내부 호스트 이름,클러스터 이름,레지스트리 경로,서비스 계정,데이터베이스 식별자 및 - everyone&#39;s best intentions 에도 불구하고 - 아직 비밀 관리자로 만들지 않은 가끔 자격 증명을 가지고 있습니다.

변환기는 클라이언트 측 JavaScript 입니다. 문서는 페이지에서 구문 분석되고 JSON 은 페이지에서 생성되며 어떤 요청도 데이터를 아무데도 전달하지 않습니다. 도구를 한 번 로드하면 네트워크와 계속 작동하여 매니페스트를 붙여 넣는 모든 작업에 대한 합리적인 습관입니다. 이것은 사이트의 모든 도구 뒤에있는 동일한 원칙이며 추론은 가이드에 설명되어 있습니다 온라인 도구의 데이터 개인 정보 보호. 범용 브라우저 툴킷을 조립하는 경우 웹 개발자 툴킷 가이드는 그 안에 속한 다른 내용을 다룹니다.

알만한 가치가 있는 한계

브라우저 탭에 맞는 변환기는 YAML 사양의 모든 모서리를 구현하지 않으며 가장자리가 없음을 암시하는 것보다 가장자리에 대해 구체적으로 설명하는 것이 더 유용합니다.

복잡한 매핑 키 - 명시적 키 ? key 키 자체가 시퀀스 또는 매핑인 양식 - JSON 개체 키가 문자열이어야 하므로 지원되지 않습니다. 와 같은 태그를 입력합니다 !!binary 또는 관례 !MyType 지시어는 해석되지 않습니다; 값은 텍스트로 전달됩니다. 특수 부동 값 .inf, -.inf, 그리고 .nan JSON에는 문자 그대로가 없고 자동으로 변환되므로 문자열로 보존됩니다 null 저장하는 것보다 더 많은 정보를 잃게 됩니다. 와 같은 지시문 %YAML 1.2 조치를 취하기보다는 무시됩니다.

이들 중 어느 것도 일반적인 쿠버네티스와 컴포즈,액션, 앤서블 파일에는 나타나지 않는다. 하나를 누르면 특정 언어&#39;s YAML 라이브러리를 위해 작성된 문서로 작업하는 것이며,그 라이브러리&#39;s 자신의 덤퍼가 올바른 도구이다.

자주 묻는 질문

yaml을 온라인으로 json으로 변환하려면 어떻게 해야 합니까?

YAML을 입력 패널에 붙여넣고 변환을 클릭합니다. 파서는 문서를 읽고, 앵커와 블록 스칼라를 확인하고, 복사하거나 다운로드할 수 있는 형식의 JSON을 인쇄합니다. 모든 것이 브라우저에서 발생하므로 파일이 업로드되지 않습니다.

JSON은 YAML의 하위 집합입니까?

네. YAML 1.2는 JSON의 엄격한 수퍼셋으로 재정의되었으므로 유효한 JSON 문서도 YAML로 유효합니다. 그 반대는 사실이 아닙니다. YAML은 주석, 앵커, 블록 스칼라, 파일당 여러 문서 및 비문자열 키를 추가합니다. 이 중 어느 것도 JSON이 직접 표현할 수 없습니다.

YAML 앵커와 별칭은 어떻게 JSON으로 변환됩니까?

JSON 에는 참조 구문이 없으므로 각 별칭은 앵커가 정의하는 값의 전체 복사본으로 확장됩니다. 기본값 블록을 세 번 재사용하는 구성은 세 개의 동일한 JSON 개체를 생성합니다. 따라서 출력은 YAML 소스보다 크지만 의미상 동일합니다.

이중 앵글 브래킷과 같은 키 병합은 어떻게 되나요?

참조된 매핑이 현재 개체에 병합됩니다. 자식 매핑에 명시적으로 작성된 키는 병합된 키를 통해 승리하며, 이는 YAML 병합 키 사양과 Kubernetes 및 Ansible 도구의 동작과 일치합니다.

탭 오류로 YAML이 실패한 이유는 무엇입니까?

YAML 은 들여쓰기에 탭 문자를 금지합니다 - 사양은 공백만 허용합니다. Enter 에 탭을 삽입하는 편집기가 일반적인 원인입니다. 대부분의 편집기가 전체 파일에 대해 한 번에 수행할 수 있는 공백으로 선행 탭을 변환하면 문서가 구문 분석됩니다.

문서 구분 기호가 있는 다중 문서 YAML 파일을 변환할 수 있습니까?

예. 구분 기호 마커 사이의 각 문서는 독립적으로 구문 분석되며 결과는 소스 순서로 문서당 하나의 요소가 있는 JSON 배열입니다. 단일 문서 파일은 단일 요소 배열이 아닌 개체 자체를 반환합니다.

포트 번호와 버전 문자열이 유형을 유지합니까?

일반 스칼라는 YAML 코어 스키마에 의해 해결되므로 인용되지 않은 8080 은 숫자 8080 이 되고 인용되지 않은 1.10 은 1.1 이 됩니다. YAML의 값을 인용하여 문자열을 유지하거나 문자열 유지 옵션을 켜서 모든 스칼라 강제성을 끕니다.

리터럴 및 접힌 블록 스칼라는 어떻게 변환합니까?

리터럴 블록은 모든 개행 문자를 유지하므로 이스케이프된 줄 바꿈이 있는 JSON 문자열이 됩니다. 접힌 블록은 공백으로 연속적인 줄을 연결하고 빈 줄을 단락 나누기로 처리합니다. Chomping 표시기는 존중됩니다: 마이너스는 후행 개행 문자를 삭제하고 플러스는 모든 후행 빈 줄을 유지합니다.


Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!