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.