JSON 데이터에서 JSON 스키마를 생성하는 도구 [닫기]


178

이 json 스키마 초안이 있습니다. JSON 데이터 샘플을 가져오고 JSON 스키마에 대한 골격을 생성하고 싶습니다.이 예제에서는 설명, 필수 등을 추가하여 수동으로 재 작업 할 수 있습니다. 특정 예제에서 유추 할 수 없습니다.

예를 들어, 내 입력에서 example.json:

{
    "foo": "lorem", 
    "bar": "ipsum"
}

내 json_schema_generator 도구를 실행하고 다음을 얻습니다.

{ "foo": {
    "type" : "string",
    "required" : true,
    "description" : "unknown"
  },
  "bar": {
    "type" : "string",
    "required" : true,
    "description" : "unknown"
  }
}

이 예제는 수동으로 코딩되었으므로 오류가있을 수 있습니다. 변환 JSON-> JSON 스키마에 도움이 될 수있는 도구가 있습니까?


그러나 도구가 문자열에서 문자열로의 일반적인 맵이 아니라는 것을 어떻게 알 수 있습니까?
hmakholm

1
제공된 예제에서 값이 문자열 인 키-값 쌍이있는 사전 (파이썬 용어)이 있음을 분명히 알 수 있습니다. 동일한 데이터를 설명하는 다른 JSON 스키마를 모릅니다. 그리고 이것은 쉬운 예일뿐입니다. 물론 JSON 스키마 초안에 명시된대로 훨씬 더 복잡해질 수 있습니다.
blueFast

3
따라서 "임의의 문자열에서 다른 임의의 문자열로의 매핑"(예 : 파일 이름에서 내용의 설명으로의 매핑)을 JSON 스키마로 표현할 수 없다고 주장하고 있습니까? 내가 아는 한, 그것은 사실 일 수도 있지만, 내 견해로는 그런 종류의 스키마를 오히려 쓸모 없게 만들 것입니다.
hmakholm 님이 Monica

1
음, 나는 우리가 그 질문과 관련된 것을 논의하고 있는지 확실하지 않지만 어쨌든. 더 나은 예를 들어 보겠습니다. JSON 데이터에 고정 키를 갖는 것이 JSON 데이터가 예를 들어 사람의 속성을 설명하는 경우에 유용합니다. "foo"와 "bar"대신 "name"과 "surname"을 생각하십시오. "name"및 "surname"은 개인 JSON 데이터의 고정 된 특성이므로 임의의 문자열이 아니며 개인 스키마의 일부입니다. 물론 값은 임의적이므로 스키마의 일부가 아닙니다.
blueFast

3
고정 키를 갖는 것이 때로는 원하는 것이며 때로는 그렇지 않습니다. 이것이 바로 전체 요점입니다. 자동화 된 툴이 원하는 옵션 중 하나를 샘플에서 감지 할 수있는 방법이 없습니다.
hmakholm 님이 Monica September

답변:


92

당신은 이것을 찾고있을 것입니다 :

http://www.jsonschema.net

JSON 문자열에서 JSON 스키마를 자동으로 생성 할 수있는 온라인 도구입니다. 스키마를 쉽게 편집 할 수 있습니다.


3
시작하기 쉽고 편리한 장소. 그러나 jsonschema.net에서이 페이지의 다른 곳에서 식별 된 문제와 개발 워크 플로에 포함 할 오프라인 또는 최소한 API로 액세스 가능한 도구를 원하고 이후 예제를 사용하여 스키마를 업데이트 할 수있는 이유를 설명했습니다. Steve Bennett의 옵션 목록.
nealmcb

초기 가져 오기 후 스키마를 편집 할 때이 사이트에서 예기치 않은 오류가 발생합니다.
Coreus

1
같은 뭔가 충돌 {"hello": "world","num": 42}하지만 외모는 promising-
DBX12

3
오래된 사이트는 확실히 충분하지 않았습니다. JSONSchema.Net 이 다시 작성되었습니다. 훨씬 강력합니다. 당신이 어떤 문제가 있다면, GitHub에 문제를보고하고 기꺼이 수정합니다 : github.com/jackwootton/json-schema
Jack

jsonschema2pojo.org 는 몇 년 동안 사용해 온 것입니다
누군가 어딘가에

83

다른 답변을 요약하면 지금까지 제안 된 JSON 스키마 생성기가 있습니다.

온라인 :

파이썬 :

NodeJS :

루비:


jskemetor-아니오setup.py
Att Righ

이 중 어떤 것이 YAML 입력을 지원하는지 알고 있습니까? 우리는 변환 할 수 있지만 추가 단계입니다.
DylanYoung

28

GenSON ( PyPI | Github )은 여러 객체에서 단일 스키마를 생성 할 수있는 JSON 스키마 생성기입니다. 스키마를 병합 할 수도 있습니다. Python으로 작성되었으며 CLI 도구와 함께 제공됩니다.

(전체 공개 : 저는 저자입니다.)


1
잘 했어! skinfer 작업을 시작하기 전에 이것을 찾지 못한 것을 후회합니다 : github.com/scrapinghub/skinfer
Elias Dorneles

1
파이썬은 아니지만 여기에 또 하나의 github.com/snowplow/schema-guru
chuwy

1
큰! 온라인 스키마 생성기 인 jsonschema.net (대부분의 객체에 대해 "필수"속성을 만들지 못하고 소형 (한 줄) 속성을 생성하거나 ID를 생략 할 수있는 옵션이 없으며 가장 중요한 것은 스키마를 생성하는 옵션) 에 실망 했습니다. 단일 스키마 배열에 대한 데이터를 작성하는 데 사용 된 데이터의 유효성을 검증하지 못합니다). 도구를 사용해보기를 기대합니다.
Dave

@ Dave-im도 json schema.net과 비슷한 문제에 직면했습니다.이 파이썬 도구가 도움이 되었습니까?
Cshah

1
@Cshah : GenSON에 깊은 감명을 받았으며 패치에 기여했습니다. 필자는 저자보다 익숙한 것보다 더 제한적인 스키마를 생성해야했기 때문에 인식 할 수없는 JSON 데이터가주의가 필요한 것으로 플래그가 지정되도록 패턴 속성 및 additionalProperties / additionalItems를 생성하는 옵션이있는 버전을 포크했습니다.
Dave


6

몇 달 후, 가장 좋은 대답은 간단한 도구입니다. 원시이지만 기능적입니다.

내가 원하는 것은 이것 과 비슷한 것 입니다. JSON 데이터는 JSON 스키마에 대한 골격을 제공 할 수 있습니다. 아직 구현하지는 않았지만 기존 JSON 스키마와 JSON 데이터가 업데이트 된 JSON 스키마를 생성 할 수 있도록 기존 JSON 스키마를 기본으로 제공 할 수 있어야합니다. 이러한 스키마가 입력으로 제공되지 않으면 완전히 기본값이 사용됩니다.

이 도구는 반복 개발에 매우 ​​유용합니다. 도구를 처음 실행할 때 JSON 스키마는 더미이지만 데이터의 진화에 따라 자동으로 구체화 될 수 있습니다.


2
@Green Su의 제안이 귀하의 요구에 어떻게 부응하지 않았는지 궁금합니다. 나는 당신이 비계 코드 생성기와 같은 점프 스타터를 제공하는 유틸리티를 설명하고 있다고 생각합니다 (당신의 용어는 '골격'입니다)?
justSteve

13
기본적으로 해당 도구의 문제점은 온라인 도구 라는 것입니다 . 개발 환경에서 로컬로 실행하고 때로는 다른 작업의 일부로 자동으로 실행해야합니다. "여기에 복사하여 붙여 넣기"도구가 도움이되지 않습니다. REST API가 있으면 충분할 것입니다.
blueFast

2
@justSteve : 복사-붙여 넣기 워크 플로를 사용하는 것 외에도 온라인 도구는 여전히 버그가 있습니다 (원래 질문 후 4 년). 도구가 잘못된 스키마를 생성하는 json 객체가 있지만 아직 버그 보고서로 제출하기 위해 최소 테스트 사례로 축소하지 않았습니다.
Dave


5

generate-schema( NPM | Github )는 JSON 객체를 사용하여 스키마를 생성하고, 하나의 출력은 JSON 스키마이며, Node.js로 작성되며 파일을 파이프하기위한 REPL 및 ClI 도구와 함께 제공됩니다.

전체 공개 : 나는 저자입니다 :)


4+ 초안으로 모듈을 업데이트 할 계획이 있습니까? 최소, 최대 속성, 참조 등을 추가 하시겠습니까? btw 도구를 주셔서 감사합니다 :) 내 프로젝트에서 사용합니다
Mr. Alien


3

json-schema-generator 는 깔끔한 Ruby 기반 JSON 스키마 생성기입니다. JSON 스키마의 초안 3과 4를 모두 지원합니다. 독립 실행 형 실행 파일로 실행하거나 Ruby 스크립트에 포함시킬 수 있습니다.

그런 다음 json-schema 를 사용 하여 원하는 경우 새로 생성 된 스키마에 대해 JSON 샘플의 유효성을 검사 할 수 있습니다 .


3

여러 입력을 지원하는 오프라인 도구의 경우 지금까지 내가 본 것 중 가장 좋은 것은 https://github.com/wolverdude/GenSON/입니다. 수천 개의 파일이 있기 때문에 표준 입력에서 파일 이름을 사용하는 도구를보고 싶습니다 . 그러나 열린 파일 설명자가 부족하므로 파일이 닫혀 있는지 확인하십시오 . 또한 재귀를 처리하는 JSON 스키마 생성기를보고 싶습니다. Java 클래스 에서 JSON 스키마로 이동하기 위해 JSON 객체에서 Java 클래스 를 생성 하려고합니다. 궁금한 점이 있거나 버그를 확인하려는 경우 GenSON 스크립트가 있습니다.

#!/bin/sh
ulimit -n 4096
rm x3d*json
cat /dev/null > x3d.json
find ~/Downloads/www.web3d.org/x3d/content/examples -name '*json' -      print| xargs node goodJSON.js | xargs python bin/genson.py -i 2 -s     x3d.json >> x3d.json
split -p '^{' x3d.json x3d.json
python bin/genson.py -i 2 -s x3d.jsonaa -s x3d.jsonab /Users/johncarlson/Downloads/www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter02-GeometryPrimitives/Box.json > x3dmerge.json 

먼저, unix.stackexchange.com/questions/211803/…에 대한 답변을 제공 할 수 있습니까?
Dave


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.