JSON verilerinden JSON şeması oluşturma aracı [kapalı]


178

Bu json şema var taslağı . JSON verilerimin bir örneğini almak ve JSON şeması için, el ile yeniden çalışabileceğim, açıklama, gerekli vb.

Örneğin, girdimden example.json:

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

Benim json_schema_generator aracını çalıştırmak ve alacağı:

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

Bu örnek manuel olarak kodlanmıştır, bu yüzden belki hatalar vardır. Orada dönüşüm JSON -> JSON şeması ile bana yardımcı olabilecek herhangi bir araç var mı?


Ancak araç, dizelerden dizelere genel bir harita olmadığını nasıl bilebilir?
hmakholm Monica

1
Sağlanan örnekte, değerlerin dizeler olduğu anahtar / değer çiftleriyle bir sözlüğümüzün (python terminolojisi) açık olduğunu söyleyebilirim. Aynı verileri tanımlayan başka bir JSON şeması bilmiyorum. Ve bu sadece kolay bir örnek: Tabii ki JSON şema taslağında belirtildiği gibi çok daha karmaşık olabilir.
blueFast

3
Yani "keyfi dizelerden diğer rastgele dizelere eşleme" (dosya adlarından içeriğin açıklamalarına eşleme gibi) JSON şeması olarak ifade edilemez mi? Bildiğim kadarıyla, bu doğru olabilir, ama bence bu tür şemaları işe yaramaz hale getirir.
hmakholm Monica

1
Mmmm, soru ile ilgili bir şeyi tartıştığımızdan emin değilim ama yine de. Daha iyi bir örnek kullanalım: JSON verilerinde sabit anahtarlara sahip olmak, bu JSON verileri örneğin bir kişinin özelliklerini açıklıyorsa kesinlikle yararlıdır. "Foo" ve "bar" yerine "name" ve "soyadı" düşünün. "name" ve "soyadı", JSON verilerinin açıkça sabit özellikleridir, bu nedenle rastgele dizeler değildir: kişi şemasının bir parçasıdır. Değerler elbette keyfidir, bu yüzden şemanın bir parçası değildir.
blueFast

3
Sabit anahtarlara sahip olmak bazen istediğiniz şeydir, bazen de değildir. Aslında tüm mesele bu: Tek bir örnekte otomatik bir aletin istediğiniz seçeneklerden hangisini algılayabilmesi mümkün değil.
hmakholm Monica

Yanıtlar:


92

Bunu arıyor olabilirsiniz:

http://www.jsonschema.net

JSON dizesinden otomatik olarak JSON şeması oluşturabilen çevrimiçi bir araçtır. Ve şemayı kolayca düzenleyebilirsiniz.


3
Başlamak için kolay ve kullanışlı bir yer. Ancak, bu sayfada başka bir yerde tanımlanan jsonschema.net ile ilgili bildirilen sorunları ve geliştirme iş akışlarına dahil etmek için çevrimdışı veya en azından API erişimli bir aracı istemek için tartışılan nedenlerin, şemaların daha sonraki örneklerle güncellenmesine izin vermeyi unutmayın. seçeneklerin listesi Steve Bennett.
nealmcb

Bu sitenin, ilk içe aktarmadan sonra şemayı düzenlerken beklenmedik hatalar atacağını lütfen unutmayın.
Coreus

1
Gibi bir şey için {"hello": "world","num": 42}
çöküyor

3
Eski siteler kesinlikle yeterince iyi değildi. JSONSchema.Net şimdi yeniden yazılmıştır. Çok daha sağlam. Herhangi bir sorun yaşarsanız, lütfen GitHub'da bildirin
Jack

jsonschema2pojo.org yıllardır kullandığım şey
Birisi

83

Diğer cevapları özetlemek gerekirse, şimdiye kadar önerilen JSON şema jeneratörleri:

İnternet üzerinden:

Python:

NodeJS:

Yakut:


jskemetor - hayırsetup.py
Att Righ

Bunlardan herhangi birinin YAML girdilerini destekleyip desteklemediğini biliyor musunuz? Dönüştürebiliriz, ama sadece ekstra bir adım.
DylanYoung

28

GenSON ( PyPI | Github ), birden çok nesneden tek bir şema oluşturabilen bir JSON Şeması oluşturucusudur. Şemaları onunla da birleştirebilirsiniz. Python ile yazılmış ve bir CLI aracı ile birlikte geliyor.

(Tam açıklama: Ben yazarım.)


1
İyi iş çıkardınız adamım! Skinfer üzerinde çalışmaya başlamadan önce bunu bulamadığım için üzgünüm: github.com/scrapinghub/skinfer
Elias Dorneles

1
Bir python değil, ama burada başka bir tane var github.com/snowplow/schema-guru
chuwy

1
Harika! Çevrimiçi şema jeneratörü jsonschema.net ile hayal kırıklığına uğradım (çoğu nesne için "gerekli" özellikler yaratamaz, kompakt (tek satır) özellikler veya kimlikler atlamak için hiçbir seçeneğe sahip değildir ve en önemlisi, bir şema oluşturur tek şema dizileri için oluşturmak için kullanılan verileri doğrulayamıyorsa). Aracınızı denemek için sabırsızlanıyoruz.
Dave

@Dave - im çok json schema.net ile benzer sorunlarla karşı karşıya, bu python aracı yardımcı oldu mu?
Cshah

1
@Cshah: GenSON'dan çok etkilendim ve ona bir yama ekledim. Tanınmayan JSON verileri dikkat gerektiren olarak işaretlenir böylece desen özellikleri ve ekProperties / AdditionalItems oluşturma seçenekleri ile bir sürümü çatal böylece yazar rahat daha daha kısıtlayıcı şemalar oluşturmak gerekiyordu.
Dave


6

Birkaç ay sonra, sahip olduğum en iyi cevap basit aracım. Ham ama işlevsel.

İstediğim benzer bir şeydir bu . JSON verileri, JSON şeması için bir iskelet sağlayabilir. Henüz uygulamadı, ancak mevcut JSON şeması artı JSON verilerinin güncellenmiş bir JSON şeması oluşturabilmesi için mevcut bir JSON şemasını temel olarak vermek mümkün olmalıdır. Giriş olarak böyle bir şema verilmezse, tamamen varsayılan değerler alınır.

Bu, yinelemeli geliştirmede çok yararlı olacaktır: araç ilk kez çalıştırıldığında, JSON şeması kukladır, ancak verilerin evrimine göre otomatik olarak rafine edilebilir.


2
@Green Su'nun önerisinin ihtiyaçlarınızı karşılamadığını merak edin. Ben iskele kod üreteci gibi bir şey - jumpstarter (terim 'iskelet') sağlayan bir yardımcı programı açıklamak düşünüyorum?
justSteve

13
Temel olarak, bu araçla ilgili sorun, çevrimiçi bir araç olmasıdır. Geliştirme ortamımda, bazen otomatik olarak diğer görevlerin bir parçası olarak çalıştırmak için buna ihtiyacım var. "Buraya kopyala, yapıştır" aracı bana yardımcı olmaz. Eğer bir REST API olsaydı bu yeterince iyi olurdu.
maviFast

2
@justSteve: çevrimiçi araç, kopyala yapıştır iş akışını kullanmaya ek olarak, hala buggy görünüyor (orijinal sorunun 4 yıl sonra). Aracın yanlış şemalar ürettiği ancak hata raporları olarak göndermek için bunları en az test senaryosuna indirmediğim json nesneleri var.
Dave


5

generate-schema( NPM | Github ) bir JSON Nesnesi alır şemalar üretir, bir çıktı JSON Şeması, Node.js yazılır ve dosyaları boru için bir REPL ve ClI aracı ile birlikte gelir.

Tam Açıklama: Ben yazarım :)


Modülü 4+ taslağa güncellemeyi planlıyor musunuz? Min, max attrs, referanslar vb. Ekleme? Btw aracı için teşekkürler :)
Bay Alien


3

json-schema-generator temiz Ruby tabanlı JSON şema üretecidir. JSON şemasının hem taslak 3 hem de 4'ü destekler. Bağımsız bir yürütülebilir dosya olarak çalıştırılabilir veya bir Ruby komut dosyasının içine gömülebilir.

Ardından, JSON örneklerini yeni oluşturulan şemanıza göre doğrulamak için json-schema kullanabilirsiniz .


3

Birden fazla girişi destekleyen çevrimdışı araçlar için, şimdiye kadar gördüğüm en iyi şey https://github.com/wolverdude/GenSON/ Binlerce dosyam olduğu için standart girdi üzerinde dosya adları alan bir araç görmek istiyorum . Ancak, açık dosya tanımlayıcıları tükendi, bu yüzden dosyaların kapalı olduğundan emin olun . Ayrıca özyineleme işleyen JSON Schema jeneratörleri görmek istiyorum. Şimdi Java sınıflarımdan JSON Schema'ya gitme umuduyla JSON nesnelerinden Java sınıfları oluşturmaya çalışıyorum . Merak ediyorsanız veya içindeki hataları tanımlamak istiyorsanız GenSON betiğim.

#!/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 



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.