2 import json schema as idl #3
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
JSON Schema import/export
This PR makes JSON Schema a first-class schema format for flatc, while still flowing through the existing FlatBuffers schema IR (reflection/reflection.fbs).
What’s included
JSON Schema export: flatc --jsonschema generates *.schema.json from .fbs
JSON Schema import: treat *.schema.json as a schema input (IDL-like), map into the FlatBuffers schema IR, and run normal generators
Optional lossless round-tripping: --jsonschema-xflatbuffers emits x-flatbuffers vendor-extension metadata + meta-schema docs
Docs + tests:
Generation + golden + round-trip stability: tests/JsonSchemaTest.sh
Import “wild” JSON Schema/OpenAPI fixtures + stable regeneration: tests/JsonSchemaImportTest.sh (fixtures under tests/jsonschema_import/)
Usage examples
Export FlatBuffers → JSON Schema: flatc --jsonschema -o out schema.fbs
Export (lossless): flatc --jsonschema --jsonschema-xflatbuffers -o out schema.fbs
Import JSON Schema → generators: flatc --cpp -o out schema.schema.json (override root via --root-type when needed)
Implementation notes / review tips
CLI wiring + .schema.json input detection: src/flatc.cpp
JSON Schema importer: Parser::DoParseJsonSchema in src/idl_parser.cpp
JSON Schema generator: src/idl_gen_json_schema.cpp
x-flatbuffers meta-schema: docs/source/schemas/x-flatbuffers.schema.json
Testing
Passed testing locally:
ctest (runs flattests)
tests/CppTest.sh
tests/JsonSchemaTest.sh
tests/JsonSchemaImportTest.sh
tests/PythonTest.sh
Go tests (default + --preserve-case)
tests/PHPTest.sh (default + --preserve-case)
The importer is intentionally permissive (unknown JSON Schema/OpenAPI keywords are ignored).
Full fidelity requires x-flatbuffers metadata; without it, some FlatBuffers semantics can’t be expressed in plain JSON Schema.