사양에서 JSON 데이터를 설명하는 방법은 무엇입니까?
사양에서 JSON 데이터를 설명하는 가장 좋은 방법은 무엇입니까?
나는 과거에 '단어 있는' 설명이 있는 예시를 사용했지만, 그것은 부정확한 느낌이다.
초기 JSON 스키마 표준이 있는 것 같지만, 그다지 활발한 프로젝트는 아닌 것 같습니다.다른 방법은요?
【갱신】며칠 고민한 결과, 변환 규약을 이용한 bmargulies 제안이 마음에 듭니다.이 케이스의 JSON 문서는 에서 나온 것입니다.NET Web Services C# 클래스 구문을 사용하여 스키마를 간단히 문서화합니다.이것은 완전히 엄격하지는 않을 수도 있지만, 관련된 모든 사람들은 그것을 이해할 것이고, 사례와 함께 가능한 한 빨리 메시지를 전달할 것입니다.
js-schema JavaScript 라이브러리를 추천합니다.그 뒤에 숨겨진 주된 동기는 당신이 질문에서 설명한 것과 같았다.이것은 JSON 스키마(또는 필요한 경우 사양)를 설명하는 간단하고 알기 쉬운 표기법입니다.
JSON Schema 에 기재되어 있는 스키마의 예를 다음에 나타냅니다.
{
"type":"object",
"properties":{
"id":{
"type":"number",
"required":true
},
"name":{
"type":"string",
"required":true
},
"price":{
"type": "number",
"minimum":0,
"required":true
},
"tags":{
"type":"array",
"items":{
"type":"string"
}
}
}
}
js-discription과 동일한 스키마 설명:
{
"id" : Number,
"name" : String,
"price" : Number.min(0),
"?tags" : Array.of(String)
}
라이브러리는 스키마에 대해 개체를 검증하고, 지정된 스키마에 적합한 랜덤 개체를 생성하며, JSON 스키마와 직렬화/직렬화/직렬화를 수행할 수 있습니다.
오래된 질문인 건 알지만 다른 사람에게 도움이 될 수도 있습니다.JSON 데이터를 기술하는 방법을 찾고 있을 때 Order를 우연히 발견했습니다.1면의 요약은 다음과 같습니다.
Order는 JSON을 설명하는 텍스트 형식입니다.Order는 JSONSchema로 컴파일할 수 있습니다.읽기 쉽고 쓰기 쉽도록 설계되어 있습니다.
저도 그렇게 생각합니다만, 지금까지는 비교적 단순한 구조로 해 본 적이 있습니다.
확장 BNF를 사용하는 건 어때요?
PERSON <- { "firstname": FIRSTNAMES, "lastname": LASTNAME, "age": AGE, "version": VERSION, "parents" <- PARENTS }
FIRSTNAMES <- [ FIRSTNAME+ ]
FIRSTNAME <- STRING
LASTNAME <- STRING
PARENTS <- [ PERSON{0,2} ]
AGE <- INTEGER
VERSION <- 1 | 2
INTEGER나 STRING과 같은 원자 유형 설명의 의미를 정의해야 합니다.사전에 하드 코드화되지 않은 키를 추가할 경우 다음과 같이 정의합니다.
BREADLOOKUP <- { (TYPE : HOWMANY)+ }
TYPE <- "white" | "dark" | "french" | "croissant"
HOWMANY <- POSITIVE-INTEGER
이렇게 하면
{ "white": 5,
"french": 2
}
정규 표현과 BNF는 모두 매우 잘 알려져 있기 때문에, 이것은 매우 쉬운 방법입니다. ?
,+
,*
,{n}
,{min,max}
(정규화에서 추출한) 몇 가지 요소를 지정하는 쉬운 방법이며, 나머지는 거의 순수한 BNF입니다.
충분히 엄격히 했다면 검증자가 파싱할 수 있을 거예요
W3C XML 스키마 또는 RelaxNG와 같이 덜 추한 스키마를 변환 규칙과 결합할 수 있습니다.
언급URL : https://stackoverflow.com/questions/3213398/how-to-describe-json-data-in-a-spec
'programing' 카테고리의 다른 글
SpringBoot - jar 파일 만들기 - META-INF/spring.factories에 자동 구성 클래스가 없습니다. (0) | 2023.03.31 |
---|---|
리액트 후크 방식으로 요청을 보내는 방법 (0) | 2023.03.31 |
부호화되지 않는 이유단일 따옴표/부호를 인코딩하는 URIC 컴포넌트 (0) | 2023.03.31 |
React의 useState 훅을 사용할 때 nullable 상태를 입력하는 올바른 방법 (0) | 2023.03.31 |
Spring Boot - Bean Definition Override예외:잘못된 콩 정의 (0) | 2023.03.31 |