왼쪽에 Elixir 코드를 붙여넣고 "변환"을 누르세요 — JSON으로 바꿔 드립니다Elixir 코드를 붙여넣으세요

이 도구가 하는 일

Elixir struct가 있는데, 빠른 변환 하나 하자고 Jason이나 Poison을 끌어오기가 애매할 때, 여기에 붙여넣으면 JSON으로 돌려드립니다. %Order{} 리터럴 하나, map, keyword list, 중첩된 struct 체인, 심지어 형태가 제각각인 map 리스트까지 모두 처리합니다.

struct에 @derive Jason.Encoder를 달았을 때 Jason.encode!/1가 주는 결과와 동일한 출력을 냅니다. __struct__ 필드는 제거되고, atom 키는 JSON 문자열 키가 되며, 중첩된 struct는 중첩된 JSON 객체로 펼쳐집니다. 리스트는 JSON 배열이 되고, nilnull, true/false는 그대로, 정수는 정수, 실수는 실수로 유지됩니다.

Keyword list([key: value, other: 1])는 JSON 객체로 출력됩니다 — Elixir의 일반적인 관례입니다. 바이너리 문자열과 charlist 모두 JSON 문자열로 변환됩니다. DateTime, Date, NaiveDateTime, TimeRFC 3339에 따라 ISO-8601 문자열로 출력됩니다. 튜플은 JSON 배열이 됩니다(커스텀 encoder를 쓴 Jason과 같은 폴백입니다).

사용하는 방법

세 단계면 충분합니다. 한 줄짜리 map이든, struct로 가득한 Phoenix 컨텍스트 모듈이든 똑같이 동작합니다.

1

Elixir 코드를 붙여넣으세요(또는 샘플 시도)

왼쪽 에디터에 코드를 넣으세요. struct 리터럴, map, keyword list, 중첩된 struct, 인스턴스가 있는 defstruct — 전부 괜찮습니다.

%ModuleName{} 문법, 파이프, defstruct 선언을 그대로 두시면 됩니다. 파서가 알아서 해석합니다.

2

변환 버튼을 누르세요

초록색 변환 버튼을 클릭하세요. 도구가 struct를 훑으면서 __struct__를 떼어내고, 중첩된 struct를 펼쳐, 한 번에 JSON으로 출력합니다.

3

JSON을 복사하세요

오른쪽 패널에서 들여쓰기된 JSON을 가져가세요. Phoenix API 테스트, ExUnit 픽스처, GraphQL 엔드포인트의 공유 스키마 등에 바로 붙여 넣을 수 있습니다.

실제로 쓸모 있는 상황

Phoenix API 픽스처

컨텍스트 schema가 있고 컨트롤러 테스트용 JSON 픽스처가 필요할 때. struct를 붙여넣고 JSON을 저장하면 끝입니다 — IEx에서 컴파일해서 인코딩할 필요가 없습니다.

GraphQL 응답 형태 확인

<a href="https://hexdocs.pm/absinthe/" target="_blank" rel="noopener">Absinthe</a> 리졸버를 작성 중이고, 리졸버 함수를 연결하기 전에 주어진 struct가 만들 JSON 형태를 먼저 확인하고 싶을 때 유용합니다.

Ecto 스키마 문서화

Ecto schema struct는 본질적으로 JSON 계약입니다. 한 번 JSON으로 바꿔 API 문서로 커밋하고, 스키마가 바뀌면 맞춰서 갱신하세요.

다른 언어로의 데이터 전달

Elixir 서비스가 Python ML 파이프라인에 데이터를 넘기는 경우. 샘플 struct를 붙여넣으면 다운스트림 팀이 받게 될 JSON을 미리 확인할 수 있습니다.

자주 묻는 질문

Jason.encode!/1과 동일한가요?

그게 목표입니다. struct에서 __struct__가 빠지고, atom 키는 문자열 키가 되며, 중첩된 struct는 중첩된 객체로 펼쳐집니다. 트리 안의 모든 struct에 @derive Jason.Encoder를 달았을 때 얻는 것과 같은 출력입니다.

atom은 어떻게 처리되나요?

map의 atom 키는 JSON 문자열 키가 됩니다. atom 값은 atom 이름을 담은 JSON 문자열이 됩니다(예: :active"active"가 됩니다) — Jason과 동일한 동작입니다.

튜플은요?

튜플은 JSON 배열이 됩니다({1, 2, 3}[1, 2, 3]). 엄밀히 말하면 Jason은 튜플에 대해 커스텀 encoder가 필요하지만, 데이터가 누락되지 않도록 이 도구는 상식적인 기본값을 선택합니다.

Keyword list와 map — 차이가 있나요?

둘 다 JSON 객체로 출력됩니다. keyword list [name: "Ava", id: 1]와 map %{name: "Ava", id: 1}는 같은 JSON을 만들어냅니다. keyword list에 중복 키가 있으면 처음 등장한 것이 남습니다.

DateTime과 Decimal은 어떻게 처리되나요?

DateTime/Date/NaiveDateTime/Time은 ISO-8601 문자열이 됩니다. Decimal 값은 JSON 숫자로 출력됩니다(숫자 문자열의 안전성을 선호한다면 문자열로도 — 상황에 따라 다릅니다). 적절한 encoder를 derive한 Jason이 주는 것과 동일합니다.

제 코드가 저장되나요?

변환을 위해 코드는 백엔드로 전송되지만 저장되지 않습니다 — 페이로드를 로그에 남기지 않습니다. 실제 사용자 데이터나 비밀 정보는 붙여넣기 전에 바꿔 두세요.

함께 쓰면 좋은 다른 도구

Elixir to JSON은 툴박스의 다른 도구들과 궁합이 좋습니다: