개발자 도구 · 구문 변환기
CSV ~ JSON 및 JSON ~ CSV: 헤더, 문자열 값 및 병합
· 작동 방식
JSON CSV 데이터 형식
CSV은 단순하고 유형이 없으며 자체 구분 기호에 대해 모호한 반면 JSON은 중첩되고 유형이 지정됩니다. 이 게시물에서는 변환기가 행을 개체에 매핑하고 그 반대로 매핑하는 방법과 각 방향에서 정보가 손실되는 위치를 보여줍니다.
모든 번호는 따옴표로 묶였습니다. CSV 내보내기는 JSON로 변환되었습니다. 여기서 42는 "42"이 되었고 우편번호는 한 번만 앞에 0을 유지했습니다.
통합 문서에서는 CSV-JSON 예제를 요청하지만 ToolAcre는 CSV을 읽지 않습니다. 엔진은 정확히 9개의 방향 쌍을 광고하며 CSV로 시작하는 쌍은 없습니다. 파일을 읽으려면 구분 기호, 인용, 헤더 존재 및 셀 유형에 대한 선택이 필요합니다. 이 패널은 네 가지 자동 추측을 거부합니다. 따라서 수정된 기사에는 배송된 JSON에서 CSV 방향이 기록되어 있습니다.
단방향 결정은 인터페이스와 오류 모두에서 볼 수 있습니다. CSV은 소스가 아닌 대상으로 나타나고 역방향을 시도하면 방언과 유형에 대해 묻는 도구를 사용하라는 조언과 함께 `UNSUPPORTED_CONVERSION`이 반환됩니다. 일반적인 주제가 다른 곳에서는 공통적이라 할지라도 양방향을 암시하는 제목은 제품을 잘못 설명할 수 있습니다.
CSV은 여기에서 읽혀지지 않습니다. 도구가 실제로 제공하는 JSON-CSV 경로로 시작하세요.
루트 JSON 배열이 행을 제공합니다. 일반 객체가 하나의 행이 됩니다. 유일한 키가 배열을 보유하는 객체는 해당 배열을 래핑 해제하고 명명된 속성을 사용했음을 경고합니다. 추가 형제 키가 있는 객체는 래핑 해제되지 않습니다. 그렇게 하면 해당 형제 키가 삭제되거나 복제되기 때문입니다.
선택한 각 레코드는 열이 수집되기 전에 평면화됩니다. 레코드는 배열 내부의 스칼라일 수도 있습니다. 이는 `value` 열을 사용합니다. 하나의 문자열이나 숫자가 레코드와 필드가 있는 테이블을 정의하지 않기 때문에 문서 루트의 베어 스칼라는 거부됩니다.
JSON에서 레코드 선택: 배열, 단일 개체 및 단일 키 배열 래퍼
JSON 유형은 셀 텍스트로만 유지됩니다. 부울은 `true` 및 `false`가 되고 숫자는 10진수 렌더링을 사용하며 null은 빈 셀이 됩니다. CSV은 해당 null을 빈 문자열과 구별할 수 없으므로 작성자는 동일한 결과를 호출하는 대신 null을 계산하고 모호성에 대해 경고합니다.
와이드 정수는 이 단계 이전에 이미 JSON 구문 분석을 거치므로 안전하지 않은 숫자 리터럴은 정밀도가 손실될 수 있습니다. 식별자를 따옴표로 묶으면 해당 텍스트가 보존됩니다. 수식과 유사한 문자열은 `=`, `+`, `-`, `@`, 탭 또는 캐리지 리턴으로 시작할 때 기본적으로 추가 아포스트로피를 받습니다. 실제 숫자 `-5`는 숫자로 유지되며 접두사가 붙지 않습니다.
CSV 출력이 JSON 유형을 보존할 수 없는 이유
열은 처음 표시된 순서대로 평면화된 키를 합친 것입니다. 한 행에 `a`이 있고 다른 행에 `b`이 있는 경우 출력에는 두 열이 모두 포함되며 누락된 각 필드를 빈 셀로 채웁니다. 경고는 잘못된 헤더 아래의 값을 이동하는 대신 불규칙한 행을 보고합니다.
객체 키 정렬은 CSV에 적용되지 않습니다. 작가의 규칙은 기록 전반에 걸쳐 처음 등장하는 것입니다. 이는 고정된 JSON 입력에 대한 예제를 안정적으로 만들지 만 스키마 계약은 아닙니다. 다운스트림 가져오기에 규정된 순서가 필요한 경우 의도적으로 소스 키를 정렬하거나 헤더를 사후 처리합니다.
중첩 데이터 평면화 — address.city와 같은 도트 경로, 인덱스 열 또는 결합된 문자열로 배열, CSV이 단순히 모양을 유지할 수 없는 지점
중첩된 객체 키는 점(`address.city`)과 결합됩니다. 배열은 동일한 구분 기호와 숫자 인덱스(`tags.0`, `tags.1`)를 사용합니다. 빈 객체와 배열은 사라지는 대신 자체 경로에 하나의 빈 셀을 유지합니다. 이는 나무가 이름으로 투영되었음을 인정하면서 직사각형을 생성합니다.
이미 점이 포함된 소스 키가 중첩된 경로로 인해 모호합니다. ToolAcre는 탐지하고 경고하지만 스프레드시트가 이해하지 못하는 이스케이프 구문을 만들어 내지는 않습니다. 깊거나 긴 배열은 일반 스프레드시트 소프트웨어가 사용할 수 없는 테이블을 내보내는 대신 변환이 거부되는 2,000 열 제한을 초과할 수도 있습니다.
작업 예: 양방향 고객 목록 — CSV에서 JSON로, 중첩 필드를 편집하고, JSON에서 중첩을 평면화하여 CSV로 다시
`[ {"id":"0042","address":{"city":"Oslo"},"tags":["new","west"],"note":"=1+1"}, {"id":"0043","address":{"city":"Lima"},"tags":[],"note":null} ]`을(를) 사용하세요. 헤더에는 id, address.city, tagged.0, tagged.1 및 note가 포함됩니다. 두 번째 행에는 태그 색인이 없으면 공백이 표시되며 해당 null 메모는 빈 텍스트와 구별할 수 없습니다.
첫 번째 메모 앞에는 아포스트로피가 붙으므로 스프레드시트에서는 이를 텍스트로 처리합니다. 레코드는 CRLF로 끝나고 구분 기호, 따옴표 또는 줄 끝이 포함된 필드는 큰따옴표로 묶이고 포함된 따옴표는 두 배로 표시됩니다. 세미콜론이나 탭을 선택하면 구분 기호가 변경됩니다. 필요한 소비자를 위해 선택적 UTF-8 BOM을 추가할 수 있습니다.
작업 예: CSV로 한 번 평면화된 중첩된 고객 배열
형식이 잘못되었거나 모호하게 인코딩된 CSV은(는) CSV이(가) 입력되지 않기 때문에 이 경로 외부에 있습니다. CSV 클리너는 방언을 선택하거나 감지하고 인용문을 수정하는 곳입니다. 여기서 소스는 엄격한 JSON이며 출력은 문서화된 작성 규칙을 따릅니다.
변환기는 또한 100,000 행과 2,000 열의 출력을 제한합니다. 헤더나 행이 없는 파일은 테이블 모양을 갖지 않으므로 빈 배열은 거부됩니다. 이러한 제한은 성능 약속이 아니라 강제된 코드 경로이며 이 기사에서는 처리량 수치를 제시하지 않습니다.
요점: CSV은 테이블이고 JSON은 트리입니다. 구문 변환기 패널이 행을 업로드하지 않고 이들 사이를 이동하는 방법
JSON은 유형이 지정된 트리입니다. CSV은 텍스트 테이블입니다. ToolAcre는 행을 선택하고, 경로를 평면화하고, 열을 결합하고, 필드를 인용하고, 위험한 텍스트를 무력화하지만 null 대 비어 있음을 유지하거나 나중에 중첩을 재구성할 수는 없습니다. 이러한 손실은 포맷팅 노이즈보다는 구조적입니다.
스프레드시트 형식의 출력이 의도된 아티팩트인 경우 이 방향을 사용하십시오. CSV~JSON이 필요한 경우 구분 기호, 헤더 및 유형을 묻는 리더를 선택하세요. 반대의 경우를 거부하는 것이 검토되지 않은 추측으로 만들어진 설득력 있는 JSON를 반환하는 것보다 더 안전합니다.