Công cụ tạo lược đồ JSON từ dữ liệu JSON [đã đóng]


178

Chúng tôi có dự thảo lược đồ json này . Tôi muốn lấy một mẫu dữ liệu JSON của mình và tạo bộ xương cho lược đồ JSON, để tôi có thể làm lại một cách thủ công, thêm những thứ như mô tả, bắt buộc, v.v., không thể suy ra từ các ví dụ cụ thể.

Ví dụ: từ đầu vào của tôi example.json:

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

Tôi sẽ chạy công cụ json_schema_generator của mình và sẽ nhận được:

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

Ví dụ này đã được mã hóa thủ công, vì vậy nó có thể có lỗi. Có công cụ nào ngoài đó có thể giúp tôi với lược đồ JSON -> JSON không?


Nhưng làm thế nào để công cụ biết rằng nó không phải là một bản đồ chung từ chuỗi này sang chuỗi khác?
hmakholm còn lại trên Monica

1
Trong ví dụ được cung cấp, tôi sẽ nói rõ ràng rằng chúng ta có một từ điển (thuật ngữ python), với các cặp khóa-giá trị, trong đó các giá trị xảy ra là các chuỗi. Tôi không biết bất kỳ lược đồ JSON nào khác sẽ mô tả cùng một dữ liệu. Và đây chỉ là một ví dụ dễ hiểu: dĩ nhiên, nó có thể phức tạp hơn nhiều, như được chỉ định trong dự thảo lược đồ JSON.
blueFast

3
Vì vậy, bạn cho rằng "ánh xạ từ các chuỗi tùy ý sang các chuỗi tùy ý khác" (chẳng hạn như ánh xạ từ tên tệp đến mô tả nội dung) không thể được biểu thị dưới dạng lược đồ JSON? Đối với tất cả những gì tôi biết, điều đó có thể đúng, nhưng nó sẽ làm cho loại schemata đó trở nên vô dụng theo quan điểm của tôi.
hmakholm còn lại trên Monica

1
Mmmm, tôi không chắc chúng ta đang thảo luận điều gì đó liên quan đến câu hỏi, nhưng dù sao đi nữa. Chúng ta hãy sử dụng một ví dụ tốt hơn: có các khóa cố định trong dữ liệu JSON chắc chắn rất hữu ích nếu dữ liệu JSON đó, ví dụ, mô tả các thuộc tính của một người. Thay vì "foo" và "bar", hãy nghĩ về "tên" và "họ". "name" và "họ" là các thuộc tính cố định rõ ràng của dữ liệu JSON của người, vì vậy chúng không phải là các chuỗi tùy ý: chúng là một phần của lược đồ người. Các giá trị tất nhiên là tùy ý, vì vậy chúng không phải là một phần của lược đồ.
blueFast

3
Có khóa cố định đôi khi là những gì bạn muốn, và đôi khi không. Trên thực tế, đó là toàn bộ vấn đề: không có cách nào một công cụ tự động có thể phát hiện từ một mẫu mà bạn muốn.
hmakholm còn lại trên Monica

Câu trả lời:


92

Bạn có thể đang tìm kiếm điều này:

http://www.jsonschema.net

Nó là một công cụ trực tuyến có thể tự động tạo lược đồ JSON từ chuỗi JSON. Và bạn có thể chỉnh sửa lược đồ dễ dàng.


3
Một nơi dễ dàng và tiện dụng để bắt đầu. Nhưng lưu ý đã báo cáo các vấn đề với jsonschema.net được xác định ở những nơi khác trên trang này và lý do thảo luận về việc muốn có một công cụ ngoại tuyến hoặc ít nhất có thể truy cập API để đưa vào quy trình phát triển, cho phép cập nhật các lược đồ với ví dụ sau, v.v. danh sách các lựa chọn của Steve Bennett.
nealmcb

Xin lưu ý rằng trang web này sẽ đưa ra các lỗi không mong muốn khi chỉnh sửa lược đồ sau lần nhập đầu tiên.
Coreus

1
Sự cố cho một cái gì đó giống như {"hello": "world","num": 42}nhưng có vẻ đầy hứa
hẹn-

3
Các trang web cũ chắc chắn là không đủ tốt. JSONSchema.Net hiện đã được viết lại. Nó mạnh mẽ hơn nhiều. Nếu bạn có bất kỳ vấn đề nào, vui lòng báo cáo chúng trên GitHub và tôi sẵn sàng sửa chúng: github.com/jackwootton/json-schema
Jack

jsonschema2pojo.org là những gì tôi đã sử dụng trong nhiều năm
Ai đó ở đâu đó

83

Tóm tắt các câu trả lời khác, đây là các trình tạo lược đồ JSON được đề xuất cho đến nay:

Trực tuyến:

Con trăn

Nút:

Ruby:


jskemetor - khôngsetup.py
Att Righ

Bất kỳ cơ hội nào bạn biết nếu bất kỳ trong số này hỗ trợ đầu vào YAML? Chúng tôi có thể chuyển đổi, nhưng chỉ là một bước thêm.
DylanYoung

28

GenSON ( PyPI | Github ) là một trình tạo Lược đồ JSON có thể tạo một lược đồ duy nhất từ ​​nhiều đối tượng. Bạn cũng có thể hợp nhất các lược đồ với nó. Nó được viết bằng Python và đi kèm với một công cụ CLI.

(Tiết lộ đầy đủ: Tôi là tác giả.)


1
Làm tốt lắm, anh bạn! Tôi rất tiếc không tìm thấy điều này trước khi tôi bắt đầu làm việc trên skinfer: github.com/scrapinghub/
Elias Dornele

1
Không phải là một con trăn, nhưng đây là một con khác github.com/snowplow/schema-guru
chuwy

1
Tuyệt quá! Tôi đã thất vọng với trình tạo lược đồ trực tuyến jsonschema.net (không tạo được các thuộc tính "bắt buộc" cho hầu hết các đối tượng, không có tùy chọn để tạo các thuộc tính (một dòng) nhỏ gọn hoặc ID bỏ qua, và quan trọng nhất là tạo ra một lược đồ không xác thực dữ liệu được sử dụng để tạo dữ liệu cho các mảng lược đồ đơn). Nhìn về phía trước để thử công cụ của bạn.
Dave

@Dave - tôi cũng đang đối mặt với các vấn đề tương tự với lược đồ json.net, công cụ python này có giúp được không?
Cshah

1
@Cshah: Tôi cực kỳ ấn tượng với GenSON và đã đóng góp một bản vá cho nó. Tôi cần tạo ra các lược đồ hạn chế hơn so với tác giả, vì vậy tôi đã chọn một phiên bản có các tùy chọn để tạo các thuộc tính mẫu và các phần bổ sung / bổ sung để dữ liệu JSON không được nhận dạng sẽ được gắn cờ là cần chú ý.
Dave


6

Sau vài tháng, câu trả lời tốt nhất tôi có là công cụ đơn giản của tôi. Nó là thô nhưng chức năng.

Những gì tôi muốn là một cái gì đó tương tự như thế này . Dữ liệu JSON có thể cung cấp bộ xương cho lược đồ JSON. Tôi chưa triển khai nó, nhưng có thể đưa ra một lược đồ JSON hiện có làm cơ sở, để lược đồ JSON hiện có cộng với dữ liệu JSON có thể tạo ra một lược đồ JSON được cập nhật. Nếu không có lược đồ nào được đưa ra làm đầu vào, các giá trị mặc định hoàn toàn được lấy.

Điều này sẽ rất hữu ích trong phát triển lặp: lần đầu tiên công cụ được chạy, lược đồ JSON là giả, nhưng nó có thể được tinh chỉnh tự động theo sự phát triển của dữ liệu.


2
Tò mò về cách đề xuất của @Green Su không đáp ứng nhu cầu của bạn. Tôi nghĩ rằng bạn đang mô tả một tiện ích cung cấp jumpstarter (thuật ngữ của bạn là 'bộ xương') - một cái gì đó giống như một trình tạo mã giàn giáo?
justSteve

13
Về cơ bản, vấn đề với công cụ đó là nó là một công cụ trực tuyến . Tôi cần nó để chạy nó cục bộ trong môi trường phát triển của mình, đôi khi tự động là một phần của các tác vụ khác. Công cụ "sao chép ở đây, dán ở đó" không giúp tôi. Nếu nó có API REST thì đủ tốt rồi.
blueFast

2
@justSteve: công cụ trực tuyến, ngoài việc sử dụng quy trình sao chép-dán, vẫn xuất hiện lỗi (4 năm sau câu hỏi ban đầu). Tôi có các đối tượng json mà công cụ tạo ra các lược đồ không chính xác nhưng chưa giảm chúng thành các trường hợp thử nghiệm tối thiểu để gửi dưới dạng báo cáo lỗi.
Dave


5

generate-schema( NPM | Github ) lấy một đối tượng JSON tạo ra các lược đồ từ nó, một đầu ra là Lược đồ JSON, nó được viết bằng Node.js và đi kèm với công cụ REPL và ClI để dẫn các tệp vào.

Tiết lộ đầy đủ: Tôi là tác giả :)


Bất kỳ kế hoạch để cập nhật các mô-đun để dự thảo 4+? Thêm min, max attrs, tài liệu tham khảo và như vậy? Cảm ơn công cụ btw :) Sẽ sử dụng nó trong Dự án của tôi
Ông Alien


3

json-lược đồ-trình tạo là một trình tạo lược đồ JSON dựa trên Ruby gọn gàng. Nó hỗ trợ cả dự thảo 3 và 4 của lược đồ JSON. Nó có thể được chạy dưới dạng thực thi độc lập hoặc có thể được nhúng bên trong tập lệnh Ruby.

Sau đó, bạn có thể sử dụng lược đồ json để xác thực các mẫu JSON dựa trên lược đồ mới được tạo nếu bạn muốn.


3

Đối với các công cụ ngoại tuyến hỗ trợ nhiều đầu vào, thứ tốt nhất tôi thấy từ trước đến nay là https://github.com/wolverdude/GenSON/ Tôi muốn xem một công cụ lấy tên tệp trên đầu vào tiêu chuẩn vì tôi có hàng ngàn tệp . Tuy nhiên, tôi hết các mô tả tệp đang mở, vì vậy hãy chắc chắn rằng các tệp đã được đóng . Tôi cũng muốn thấy các trình tạo Lược đồ JSON xử lý đệ quy. Bây giờ tôi đang làm việc để tạo các lớp Java từ các đối tượng JSON với hy vọng sẽ đi đến Lược đồ JSON từ các lớp Java của tôi. Đây là kịch bản GenSON của tôi nếu bạn tò mò hoặc muốn xác định lỗi trong đó.

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

Trước tiên, bạn có thể cung cấp câu trả lời cho unix.stackexchange.com/questions/211804/ không?
Dave

2

Có rất nhiều công cụ được đề cập, nhưng một công cụ nữa được gọi là suy luận JSON Schema cho bản ghi:

https://github.com/rnd0101/json_schema_inferencer

(đó không phải là thư viện hay sản phẩm, mà là tập lệnh Python)

Với công bố đầy đủ thông thường: Tôi là tác giả.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.