개발자 도구 · 구문 변환기
네 가지 데이터 모델 비교: JSON, YAML, TOML 및 XML가 매핑되지 않는 이유 1:1
· 배경
데이터 형식 JSON YAML
이러한 형식 간의 모든 변환은 서로 다른 데이터 모델을 중심으로 설계되었기 때문에 어딘가에서 손실이 발생합니다. 이 게시물에서는 유형 시스템과 구조를 비교하여 변환 시 유지되는 항목과 삭제되는 항목을 예측할 수 있습니다.
왕복되지 않는 구성 — 세 가지 형식을 통해 변환된 파일과 다르게 돌아온 필드
안전한 숫자, 문자열, 부울, 배열 및 중첩된 개체를 포함하는 일반 개체는 JSON-YAML-to-JSON 및 JSON-to-TOML-to-JSON 테스트에서 살아남을 수 있습니다. TOML 앞에 null을 추가하고, TOML의 날짜/시간, 혼합된 XML 콘텐츠 또는 YAML 주석, 일부 값 또는 소스 정보 변경을 추가합니다.
유용한 질문은 변환이 보편적으로 손실이 있는지 여부가 아닙니다. 필요한 속성을 유지하는 입력 클래스와 방향이 다릅니다. ToolAcre의 경고 및 거부는 모든 쌍을 하나의 마케팅 약속으로 축소하는 대신 해당 매트릭스를 관찰 가능하게 만듭니다.
대표적인 구성은 일부 쌍을 통해 왕복할 수 있지만 지원되는 모든 형태를 왕복할 수는 없습니다.
JSON는 이 파서에서 null, 부울, 숫자, 문자열, 배열 및 개체를 제공합니다. 주석, 날짜/시간 유형 또는 공유 참조 구문이 없습니다. JavaScript는 숫자를 IEEE-754 두 배로 구문 분석하므로 안전 범위를 넘어 이미 인용되지 않은 정수는 다른 작성자가 보기 전에 정밀도를 잃을 수 있습니다.
개체 키는 문자열이며 선택적 정렬로 표시가 변경됩니다. 배열은 순서대로 유지됩니다. 엄격한 구문 분석은 주석, 후행 쉼표 및 무한한 숫자 토큰을 거부하여 다른 독자를 위한 간결한 기준을 설정합니다.
이 JavaScript 구현에서 사용되는 JSON의 가치 모델
ToolAcre는 제한된 JSON 또는 핵심 스키마를 통해 YAML을 허용합니다. 앵커와 별칭이 확인되고, 주석이 사라지고, 스트림이 배열이 되고, 중복 키가 경고와 함께 마지막 값을 유지하고, 재귀적이거나 폭발적인 별칭이 거부됩니다.
사용자 정의 태그, 바이너리, 타임스탬프, 집합 및 언어 객체 생성자는 거부됩니다. Core Infinity 및 NaN은 경고와 함께 대상 형식에서 null이 됩니다. 이는 완전한 YAML 개체 지원을 주장하는 것이 아니라 의도적으로 YAML의 광범위한 태그 시스템의 하위 집합입니다.
제한된 YAML 모델 ToolAcre는 허용합니다.
TOML는 테이블로 시작하고 문자열, 부호 있는 정수, 부동 소수점, 부울, 배열, 테이블 및 네 가지 임시 종류를 지원합니다. null이 없습니다. ToolAcre는 숫자를 잃지 않고 날짜와 시간을 소스 지향 문자열로 변환하고 넓은 정수를 십진수 문자열로 변환합니다.
TOML을 작성할 때 null 객체 키는 생략되고 null 배열 항목은 빈 문자열이 됩니다. 루트 배열과 스칼라는 거부됩니다. 헤더, 점으로 구분된 키, 인라인 테이블 중 주석과 작성자의 선택은 일반 값을 통해 반환되지 않습니다.
TOML의 루트 테이블, 시간 값 및 null 경계
XML은(는) `@` 속성, 일반 하위 키, `#text`, `#cdata`, 반복 형제 배열 및 리터럴 네임스페이스 접두사가 있는 트리로 프로젝션됩니다. 주석, 선언 및 처리 지침이 삭제됩니다. 혼합 텍스트 위치가 손실되고 반복이 나타나기 전에는 일대 다를 알 수 없습니다.
추론을 선택하지 않은 경우 값은 문자열로 읽혀집니다. JSON에서 작성된 Null은 빈 요소가 되며 반환 시 빈 문자열과 구별할 수 없습니다. 모든 DOCTYPE은 거부되고 잘못된 이름은 다시 작성되는 대신 직렬화를 중지합니다.
ToolAcre의 XML 투영: 요소, 속성, 텍스트 및 리터럴 접두사
9개 방향 배송: JSON ~ YAML, XML, TOML 및 CSV; YAML에서 JSON 및 TOML로; TOML에서 JSON 및 YAML로; XML ~ JSON. JSON 모양의 일반 값은 JSON과 YAML 사이에서 가장 좋습니다. TOML에는 날짜 및 null 경계가 도입되었습니다. XML에는 이름 지정 및 노드 범주 규칙이 필요합니다.
CSV은 단조로운 이상치이며 출력 전용입니다. 배열 또는 선택한 개체는 행이 되고, 중첩된 경로는 점선 열로 병합되며, 빈 텍스트와 수식 같은 문자열이 포함된 Null 병합은 무효화됩니다. CSV-to-JSON, XML-to-TOML 및 기타 부재 쌍은 추론되지 않고 거부됩니다.
배송된 9개 방향에 대한 호환성 매트릭스, CSV만 출력으로 사용
바이너리 형식 및 스키마 언어는 범위를 벗어납니다. 스키마는 목록 카디널리티를 복원하거나 비즈니스 형태의 유효성을 검사할 수 있는 반면, 바이너리 인코딩은 여기에 표시되지 않은 바이트 수준 유형 및 프레이밍을 도입합니다. 변환기는 이러한 기능을 주장하지 않습니다.
구문 변환도 애플리케이션 유효성을 입증하지 않습니다. 깨끗한 Kubernetes 모양의 YAML, XML 주문 메시지 또는 TOML 프로젝트 파일은 여전히 대상 계약을 위반할 수 있습니다. 구문 매핑을 검사한 후 도메인 유효성 검사기를 사용하세요.
요점: 모델을 선택한 다음 구문을 선택하고 구문 변환기 패널을 사용하여 변환을 커밋하기 전에 테스트하는 방법
구두점을 선택하기 전에 데이터 모델을 선택하세요. 주석과 별칭이 중요한 경우 JSON 홉은 이를 보존할 수 없습니다. null이 중요한 경우 TOML 출력이 이를 변경합니다. 순서가 지정된 혼합 콘텐츠가 중요한 경우 일반 JSON 프로젝션으로는 충분하지 않습니다. 대상이 테이블인 경우 중첩된 JSON에는 명시적인 평면화 규칙이 필요합니다.
ToolAcre를 사용하여 하나의 대표 문서를 테스트하고 모든 경고를 읽으십시오. 결과는 구체적인 쌍과 입력에 대한 증거이며, 모든 변환을 무손실로 호출하거나 지원되는 모든 파서를 완료할 수 있는 권한이 아닙니다.
서비스에 중요한 경계(null, 빈 텍스트, 큰 식별자, 날짜와 유사한 문자열, 하나의 반복 레코드, YAML이 포함된 경우 주석 또는 별칭, XML이 포함된 경우 혼합 텍스트)에서 대표 문서를 구축합니다. 지원되는 각 홉 이후 정규화된 값을 비교하고 결과와 함께 경고를 유지합니다. 해당 행렬은 익숙한 구문에 대한 모호한 선호가 아니라 선택한 모델에 대한 결정 인공물이 됩니다.