01

Syntactic

JSON.parse() agrees
✓ {"x": 1}
× {"x": 1 // unclosed
Parseable. The bytes form valid JSON.
02

Schema

Validator agrees
✓ {"age": 30}
× {"age": "old"} // type
Matches the declared shape: types, enums, required fields.
03

Semantic

Reality agrees
✓ {"capital_of_france": "Paris"}
× {"capital_of_france": "Berlin"}
Actually answers the task. No constraint can give you this.