Alat untuk menghasilkan skema JSON dari data JSON [ditutup]

178

Kami memiliki konsep skema json ini . Saya ingin mendapatkan sampel data JSON saya dan menghasilkan kerangka untuk skema JSON, yang dapat saya ulang secara manual, menambahkan hal-hal seperti deskripsi, diperlukan, dll, yang tidak dapat disimpulkan dari contoh-contoh spesifik.

Misalnya, dari masukan saya example.json:

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

Saya akan menjalankan alat json_schema_generator saya dan mendapatkan:

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

Contoh ini telah dikodekan secara manual, jadi mungkin ada kesalahan. Apakah ada alat di luar sana yang dapat membantu saya dengan konversi JSON -> skema JSON?

blueFast
sumber
Tetapi bagaimana alat ini tahu bahwa itu bukan peta generik dari string ke string?
hmakholm tersisa Monica
1
Dalam contoh yang diberikan, saya akan mengatakan dengan jelas bahwa kita memiliki kamus (terminologi python), dengan pasangan kunci-nilai, di mana nilainya menjadi string. Saya tidak tahu skema JSON lain yang akan menjelaskan data yang sama. Dan ini hanyalah contoh mudah: itu bisa menjadi jauh lebih rumit, tentu saja, seperti yang ditentukan dalam rancangan skema JSON.
blueFast
3
Jadi, Anda mengklaim bahwa "peta dari string arbitrer ke string arbitrer lainnya" (seperti pemetaan dari nama file hingga deskripsi konten) tidak dapat dinyatakan sebagai skema JSON? Sejauh yang saya tahu, itu mungkin benar, tetapi itu akan membuat skema semacam itu agak tidak berguna dalam pandangan saya.
hmakholm tersisa Monica
1
Mmmm, saya tidak yakin kita membahas sesuatu yang relevan dengan pertanyaan itu, tapi bagaimanapun. Mari kita gunakan contoh yang lebih baik: memiliki kunci tetap dalam data JSON pasti berguna jika data JSON itu, misalnya, menggambarkan properti seseorang. Alih-alih "foo" dan "bar", pikirkan tentang "nama", dan "nama keluarga". "nama" dan "nama keluarga" jelas merupakan properti tetap dari data JSON orang tersebut, sehingga mereka bukan string yang sewenang-wenang: mereka adalah bagian dari skema orang. Nilai-nilai ini tentu saja sewenang-wenang, sehingga bukan bagian dari skema.
blueFast
3
Memiliki kunci tetap terkadang adalah yang Anda inginkan, dan terkadang tidak. Itulah intinya sebenarnya: tidak mungkin alat otomatis dapat mendeteksi pada sampel tunggal mana dari opsi yang Anda inginkan.
hmakholm tersisa Monica

Jawaban:

92

Anda mungkin mencari ini:

http://www.jsonschema.net

Ini adalah alat online yang dapat secara otomatis menghasilkan skema JSON dari string JSON. Dan Anda dapat mengedit skema dengan mudah.

Green Su
sumber
3
Tempat yang mudah dan praktis untuk memulai. Tetapi perhatikan masalah yang dilaporkan dengan jsonschema.net yang diidentifikasi di tempat lain di halaman ini, dan alasan yang dibahas untuk menginginkan alat offline, atau setidaknya dapat diakses API, untuk dimasukkan dalam alur kerja pengembangan, memungkinkan pembaruan skema dengan contoh nanti dll. Lihat juga yang bagus daftar opsi oleh Steve Bennett.
nealmcb
Harap perhatikan bahwa situs ini akan menampilkan kesalahan yang tidak terduga saat mengedit skema setelah impor awal.
Coreus
1
Gangguan untuk sesuatu seperti {"hello": "world","num": 42}tetapi terlihat menjanjikan-
DBX12
3
Situs lama jelas tidak cukup baik. JSONSchema.Net sekarang telah ditulis ulang. Itu jauh lebih kuat. Jika Anda memiliki masalah, tolong laporkan pada GitHub dan saya akan dengan senang hati memperbaikinya: github.com/jackwootton/json-schema
Jack
jsonschema2pojo.org adalah apa yang telah saya gunakan selama bertahun
Seseorang di suatu tempat
83

Meringkas jawaban lain, berikut adalah skema generator JSON yang diusulkan sejauh ini:

On line:

Python:

NodeJS:

Rubi:

Steve Bennett
sumber
jskemetor - nosetup.py
Att Righ
Adakah kemungkinan Anda tahu jika ada yang mendukung input YAML? Kita bisa mengonversi, tetapi hanya langkah ekstra.
DylanYoung
28

GenSON ( PyPI | Github ) adalah generator Skema JSON yang dapat menghasilkan skema tunggal dari banyak objek. Anda juga dapat menggabungkan skema dengannya. Itu ditulis dalam Python dan dilengkapi dengan alat CLI.

(Pengungkapan penuh: Saya penulis.)

wolverdude
sumber
1
Kerja bagus, bung! Saya menyesal tidak menemukan ini sebelum saya mulai bekerja pada skinfer: github.com/scrapinghub/skinfer
Elias Dorneles
1
Bukan python, tapi ini satu lagi github.com/snowplow/schema-guru
chuwy
1
Bagus! Saya kecewa dengan generator skema online jsonschema.net (gagal membuat properti "wajib" untuk sebagian besar objek, tidak memiliki opsi untuk menghasilkan properti kompak (satu baris) atau menghilangkan ID, dan yang paling penting, menghasilkan skema yang gagal memvalidasi data yang digunakan untuk membuatnya untuk array skema tunggal). Berharap untuk mencoba alat Anda.
Dave
@Dave - saya juga menghadapi masalah serupa dengan json schema.net, apakah alat python ini membantu?
Cshah
1
@Cshah: Saya sangat terkesan dengan GenSON dan menyumbang tambalan untuk itu. Saya perlu membuat skema yang lebih ketat daripada yang membuat nyaman penulis, jadi saya mencabang versi dengan opsi untuk menghasilkan properti pola dan properti tambahan / item tambahan sehingga data JSON yang tidak dikenali akan ditandai sebagai perlu perhatian.
Dave
6

Setelah beberapa bulan, jawaban terbaik yang saya miliki adalah alat sederhana saya. Itu mentah tetapi fungsional.

Yang saya inginkan adalah sesuatu yang mirip dengan ini . Data JSON dapat menyediakan kerangka untuk skema JSON. Saya belum mengimplementasikannya, tetapi harus memungkinkan untuk memberikan skema JSON yang ada sebagai dasar, sehingga skema JSON yang ada ditambah data JSON dapat menghasilkan skema JSON yang diperbarui. Jika tidak ada skema yang diberikan sebagai input, nilai default sepenuhnya diambil.

Ini akan sangat berguna dalam pengembangan berulang: pertama kali alat dijalankan, skema JSON adalah dummy, tetapi dapat disempurnakan secara otomatis sesuai dengan evolusi data.

blueFast
sumber
2
Penasaran dengan bagaimana saran @Green Su tidak memenuhi kebutuhan Anda. Saya pikir Anda menggambarkan sebuah utilitas yang menyediakan jumpstarter (istilah Anda adalah 'skeletal') - sesuatu seperti generator kode perancah?
justSteve
13
Pada dasarnya, masalah dengan alat itu adalah bahwa itu adalah alat online . Saya membutuhkannya untuk menjalankannya secara lokal di lingkungan pengembangan saya, kadang-kadang secara otomatis sebagai bagian dari tugas lain. Alat "salin di sini, tempel di sana" tidak membantu saya. Jika memiliki API ISTIRAHAT itu akan cukup baik.
blueFast
2
@justSteve: alat online, selain menggunakan alur kerja salin-rekat, masih tampak bermasalah (4 tahun setelah pertanyaan awal). Saya memiliki objek json yang alatnya menghasilkan skema yang salah tetapi belum menguranginya menjadi kasus uji minimal untuk dikirim sebagai laporan bug.
Dave
5

Ada alat python untuk menghasilkan Skema JSON untuk JSON yang diberikan: https://github.com/perenecabuto/json_schema_generator

Vinícius Mendes
sumber
4
Ini tidak terawat sejak 2013. Ini tidak mendukung Python 3. Selain itu, hanya mendukung konsep yang lebih lama, yaitu draft-03.
Acumenus
5

generate-schema( NPM | Github ) mengambil Objek JSON menghasilkan skema dari itu, satu output adalah Skema JSON, itu ditulis dalam Node.js dan dilengkapi dengan alat REPL dan ClI untuk memipipkan file ke.

Pengungkapan Penuh: Saya penulis :)

Nijikokun
sumber
Adakah rencana untuk memperbarui modul ke konsep 4+? Menambahkan min, maks attrs, referensi, dan sebagainya? Terima kasih untuk alat btw :) Akan menggunakannya dalam Proyek saya
Tn. Alien
5

Ada alat nodejs yang mendukung skema json v4 di https://github.com/krg7880/json-schema-generator

Ia berfungsi baik sebagai alat baris perintah, atau sebagai perpustakaan nodejs:

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

schemaObj = jsonSchemaGenerator(json);
Johann Philipp Strathausen
sumber
1
Hadir dengan CLI juga!
Peter Ilfrich
3

json-schema-generator adalah generator skema JSON berbasis Ruby yang rapi. Ini mendukung konsep 3 dan 4 skema JSON. Itu dapat dijalankan sebagai executable mandiri, atau dapat tertanam di dalam skrip Ruby.

Kemudian Anda bisa menggunakan skema json untuk memvalidasi sampel JSON terhadap skema yang baru dibuat jika Anda mau.

HappyCoder86
sumber
3

Untuk alat offline yang mendukung banyak input, yang terbaik yang saya lihat sejauh ini adalah https://github.com/wolverdude/GenSON/ Saya ingin melihat alat yang mengambil nama file pada input standar karena saya memiliki ribuan file . Namun, saya kehabisan deskriptor file terbuka, jadi pastikan file ditutup . Saya juga ingin melihat generator Skema JSON yang menangani rekursi. Saya sekarang bekerja pada menghasilkan kelas Java dari objek JSON dengan harapan pergi ke Skema JSON dari kelas Java saya. Ini adalah skrip GenSON saya jika Anda penasaran atau ingin mengidentifikasi bug di dalamnya.

#!/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 
John Carlson
sumber
Pertama, dapatkah Anda memberikan jawaban untuk unix.stackexchange.com/questions/211803/… ?
Dave
2

Ada banyak alat yang disebutkan, tetapi satu lagi yang disebut JSON Schema inferencer sebagai catatan:

https://github.com/rnd0101/json_schema_inferencer

(Ini bukan perpustakaan atau produk, tetapi skrip Python)

Dengan Pengungkapan Penuh seperti biasa: Akulah penulisnya.

Roman Susi
sumber