เครื่องมือในการสร้างสคีมา JSON จากข้อมูล JSON [ปิด]


178

เรามีร่างแบบร่าง json นี้ ฉันต้องการรับตัวอย่างข้อมูล JSON ของฉันและสร้างโครงกระดูกสำหรับ JSON schema ที่ฉันสามารถทำงานซ้ำได้ด้วยตนเองเพิ่มสิ่งต่าง ๆ เช่นคำอธิบายจำเป็น ฯลฯ ซึ่งไม่สามารถอนุมานจากตัวอย่างที่เฉพาะเจาะจง

ตัวอย่างเช่นจากอินพุตของฉัน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 ได้? สำหรับทั้งหมดที่ฉันรู้นั่นอาจจะเป็นจริง แต่มันจะทำให้ schemata ชนิดนั้นค่อนข้างไร้ประโยชน์ในมุมมองของฉัน
hmakholm ออกเดินทางจากโมนิกา

1
อืมฉันไม่แน่ใจว่าเรากำลังพูดถึงสิ่งที่เกี่ยวข้องกับคำถาม แต่อย่างไรก็ตาม ลองใช้ตัวอย่างที่ดีกว่า: การมีคีย์ที่คงที่ในข้อมูล JSON นั้นมีประโยชน์อย่างแน่นอนหากข้อมูล JSON นั้นเป็นตัวอย่างการอธิบายคุณสมบัติของบุคคล แทนที่จะเป็น "foo" และ "bar" ลองคิดถึง "ชื่อ" และ "นามสกุล" "name" และ "surname" เป็นคุณสมบัติที่ชัดเจนของข้อมูล JSON ของบุคคลดังนั้นจึงไม่ใช่สตริงที่กำหนดเอง: เป็นส่วนหนึ่งของ schema ของบุคคล แน่นอนว่าค่าเหล่านี้เป็นค่าที่กำหนดเองดังนั้นจึงไม่ได้เป็นส่วนหนึ่งของสคีมา
blueFast

3
บางครั้งการมีคีย์คงที่คือสิ่งที่คุณต้องการและบางครั้งมันก็ไม่ใช่ นั่นคือประเด็นทั้งหมดในความเป็นจริง: ไม่มีทางที่เครื่องมืออัตโนมัติสามารถตรวจจับได้จากตัวอย่างเดียวซึ่งเป็นตัวเลือกที่คุณต้องการ
hmakholm ออกเดินทางจากโมนิกา

คำตอบ:


92

คุณอาจกำลังมองหาสิ่งนี้:

http://www.jsonschema.net

มันเป็นเครื่องมือออนไลน์ที่สามารถสร้างสคีมา JSON จากสตริง JSON โดยอัตโนมัติ และคุณสามารถแก้ไขสคีมาได้อย่างง่ายดาย


3
สถานที่ที่ง่ายและสะดวกในการเริ่มต้น แต่ทราบรายงานปัญหาเกี่ยวกับ jsonschema.net ระบุที่อื่นในหน้านี้และเหตุผลที่กล่าวถึงสำหรับความต้องการออฟไลน์หรืออย่างน้อย API ที่สามารถเข้าถึงได้เครื่องมือที่จะรวมในการพัฒนาเวิร์กโฟลว์อนุญาตให้อัปเดต schemas ด้วยตัวอย่างในภายหลังเป็นต้นดูเพิ่มเติม รายการตัวเลือกโดย Steve Bennett
nealmcb

โปรดทราบว่าเว็บไซต์นี้จะโยนข้อผิดพลาดที่ไม่คาดคิดเมื่อแก้ไขสคีมาหลังจากนำเข้าครั้งแรก
Coreus

1
เกิดปัญหาบางอย่างเช่น{"hello": "world","num": 42}แต่รูปลักษณ์ promising-
DBX12

3
เว็บไซต์เก่าไม่ดีพอ JSONSchema.Netถูกเขียนใหม่ตอนนี้ มันแข็งแกร่งกว่านี้มาก หากคุณมีปัญหาใด ๆ โปรดรายงานพวกเขาใน GitHub และฉันยินดีที่จะแก้ไข: github.com/jackwootton/json-schema
แจ็ค

jsonschema2pojo.orgคือสิ่งที่ฉันใช้มานานหลายปี
บางคนอยู่ที่ไหนสักแห่ง

83

สรุปคำตอบอื่น ๆ ต่อไปนี้เป็นตัวสร้างสคีมา JSON ที่เสนอมาจนถึงตอนนี้:

ออนไลน์:

งูหลาม:

NodeJS:

ทับทิม:


jskemetor - ไม่setup.py
Att Righ

มีโอกาสใดบ้างที่คุณรู้ว่าสิ่งเหล่านี้รองรับอินพุต YAML หรือไม่? เราแปลงได้ แต่เป็นเพียงขั้นตอนพิเศษ
DylanYoung

28

GenSON ( PyPI | Github ) เป็นตัวสร้าง JSON Schema ที่สามารถสร้าง schema เดียวจากหลาย ๆ วัตถุ นอกจากนี้คุณยังสามารถรวมสกีมากับมัน มันเขียนใน Python และมาพร้อมกับเครื่องมือ CLI

(การเปิดเผยแบบเต็ม: ฉันเป็นผู้เขียน)


1
เป็นคนดีมาก! ฉันเสียใจที่ไม่พบสิ่งนี้ก่อนที่ฉันจะเริ่มทำงานกับ skinfer: github.com/scrapinghub/skinfer
Elias Dorneles

1
ไม่ใช่งูหลาม แต่นี่คือgithub.com/snowplow/schema-guru
chuwy

1
ที่ดี! ฉันผิดหวังกับตัวสร้าง schema ออนไลน์jsonschema.net (มันล้มเหลวในการสร้างคุณสมบัติ "จำเป็น" สำหรับวัตถุส่วนใหญ่ไม่มีตัวเลือกในการสร้างคุณสมบัติขนาดกะทัดรัด (หนึ่งบรรทัด) หรือละเว้น ID และที่สำคัญที่สุดคือสร้างสคีมาที่ ล้มเหลวในการตรวจสอบข้อมูลที่ใช้ในการสร้างมันสำหรับอาร์เรย์อาร์เรย์เดียว) รอคอยที่จะลองใช้เครื่องมือของคุณ
เดฟ

@Dave - ฉันประสบปัญหาคล้ายกันกับ json schema.net เครื่องมือ python นี้ช่วยได้หรือไม่
Cshah

1
@Cshah: ฉันประทับใจมากกับ GenSON และมีส่วนร่วมในการแก้ไข ฉันต้องการสร้างสกีมาที่ จำกัด มากขึ้นกว่าที่ผู้เขียนพอใจด้วยดังนั้นฉันจึงแยกรุ่นด้วยตัวเลือกเพื่อสร้างคุณสมบัติรูปแบบและเพิ่มเติมคุณสมบัติ / เพิ่มเติมรายการเพื่อให้ข้อมูล JSON ที่ไม่รู้จักจะถูกตั้งค่าสถานะเป็นต้องการความสนใจ
เดฟ

22

เมื่อเห็นว่าคำถามนี้มี upvotes ค่อนข้างมากฉันเพิ่มข้อมูลใหม่ (ฉันไม่แน่ใจว่านี่เป็นเรื่องใหม่ แต่หาไม่พบในเวลานั้น)


6

หลังจากผ่านไปหลายเดือนคำตอบที่ดีที่สุดที่ฉันมีคือเครื่องมือง่าย ๆ ของฉัน มันดิบ แต่ทำงานได้

สิ่งที่ผมต้องการคือสิ่งที่คล้ายกับนี้ ข้อมูล JSON สามารถจัดเตรียมโครงกระดูกสำหรับสกีมา JSON ฉันยังไม่ได้ใช้งาน แต่ควรเป็นไปได้ที่จะให้สคีมา JSON ที่มีอยู่เป็นพื้นฐานเพื่อให้สคีมา JSON ที่มีอยู่รวมกับข้อมูล JSON สามารถสร้างสคีมา JSON ที่อัปเดตได้ หากไม่ได้รับสคีมาดังกล่าวเป็นอินพุตจะมีการใช้ค่าดีฟอลต์อย่างสมบูรณ์

สิ่งนี้จะเป็นประโยชน์อย่างมากในการพัฒนาแบบวนซ้ำ: ครั้งแรกที่มีการเรียกใช้เครื่องมือ JSON schema นั้นจำลองมา แต่สามารถปรับปรุงได้โดยอัตโนมัติตามวิวัฒนาการของข้อมูล


2
อยากรู้ว่าคำแนะนำของ @Green Su ไม่สอดคล้องกับความต้องการของคุณอย่างไร ฉันคิดว่าคุณกำลังอธิบายถึงยูทิลิตี้ที่ให้ jumpstarter (คำของคุณคือ 'โครงกระดูก') - บางอย่างเช่นเครื่องกำเนิดรหัสนั่งร้าน?
justSteve

13
โดยทั่วไปปัญหาเกี่ยวกับเครื่องมือนั้นคือมันเป็นเครื่องมือออนไลน์ ฉันต้องการให้มันรันในเครื่องในสภาพแวดล้อมการพัฒนาของฉันซึ่งบางครั้งก็เป็นส่วนหนึ่งของงานอื่นโดยอัตโนมัติ เครื่องมือ "คัดลอกที่นี่วางที่นั่น" ไม่ช่วยฉัน หากมี REST API ก็คงจะดีพอ
blueFast

2
@justSteve: เครื่องมือออนไลน์นอกเหนือจากการใช้เวิร์กโฟลว์การคัดลอกวางยังปรากฏ buggy (4 ปีหลังจากคำถามเดิม) ฉันมีวัตถุ json ซึ่งเครื่องมือสร้างสกีมาที่ไม่ถูกต้อง แต่ยังไม่ได้ลดลงเป็นกรณีทดสอบขั้นต่ำเพื่อส่งเป็นรายงานบั๊ก
เดฟ

5

มีเครื่องมือหลามเพื่อสร้าง JSON Schema สำหรับ JSON ที่กำหนด: https://github.com/perenecabuto/json_schema_generator


4
สิ่งนี้ไม่ได้ถูกทำลายตั้งแต่ปี 2556 แต่ก็ไม่รองรับ Python 3 ยิ่งไปกว่านั้นรองรับเฉพาะรุ่นเก่าdraft-03เท่านั้น
คิวเมนตัส

5

generate-schema( NPM | Github ) ใช้ JSON Object สร้างสกีมาจากมันหนึ่งเอาต์พุตคือ JSON Schema มันเขียนใน Node.js และมาพร้อมกับเครื่องมือ REPL และ ClI สำหรับการไพพ์ไฟล์เข้า

การเปิดเผยแบบเต็ม: ฉันเป็นผู้เขียน :)


มีแผนที่จะอัพเดตโมดูลเป็นแบบร่าง 4+ หรือไม่ การเพิ่ม min, max attrs, การอ้างอิงและอื่น ๆ ? ขอบคุณสำหรับเครื่องมือ btw :) จะใช้มันในโครงการของฉัน
Mr. Alien

5

มีเครื่องมือ nodejs ที่สนับสนุน json schema v4 ที่https://github.com/krg7880/json-schema-generator

มันทำงานได้ทั้งเป็นเครื่องมือบรรทัดคำสั่งหรือเป็นห้องสมุด nodejs:

var jsonSchemaGenerator = require('json-schema-generator'),
    obj = { some: { object: true } },
    schemaObj;

schemaObj = jsonSchemaGenerator(json);

1
มาพร้อมกับ CLI เช่นกัน!
Peter Ilfrich

3

JSON-สคีกำเนิดเป็นเครื่องมือสร้าง JSON schema ที่ใช้ Ruby อย่างเรียบร้อย สนับสนุนทั้งร่าง 3 และ 4 ของสคีมา JSON มันสามารถเรียกใช้เป็นปฏิบัติการแบบสแตนด์อโลนหรือสามารถฝังอยู่ภายในของสคริปต์ทับทิม

จากนั้นคุณสามารถใช้json-schemaเพื่อตรวจสอบความถูกต้องของตัวอย่าง JSON กับสคีมาที่คุณสร้างขึ้นใหม่หากคุณต้องการ


3

สำหรับเครื่องมือออฟไลน์ที่รองรับอินพุตหลายอินพุตสิ่งที่ดีที่สุดที่ฉันเคยเห็นคือhttps://github.com/wolverdude/GenSON/ ฉันต้องการดูเครื่องมือที่ใช้ชื่อไฟล์ในอินพุตมาตรฐานเพราะฉันมีไฟล์หลายพันไฟล์ . อย่างไรก็ตามฉันไม่มีตัวอธิบายไฟล์ที่เปิดอยู่ดังนั้นตรวจสอบให้แน่ใจว่าปิดไฟล์แล้ว ฉันต้องการเห็นเครื่องกำเนิด JSON Schema ที่จัดการการเรียกซ้ำ ตอนนี้ฉันกำลังทำงานเพื่อสร้างคลาส Java จากออบเจ็กต์ JSON โดยหวังว่าจะไปที่ JSON Schema จากคลาส 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/หรือไม่?
เดฟ

2

มีเครื่องมือมากมายที่กล่าวถึง แต่อีกหนึ่งตัวเรียกว่า JSON Schema inferencer สำหรับบันทึก:

https://github.com/rnd0101/json_schema_inferencer

(ไม่ใช่ไลบรารีหรือผลิตภัณฑ์ แต่เป็นสคริปต์ Python)

ด้วยการเปิดเผยเต็มปกติ: ฉันเป็นผู้เขียน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.