From 3c339ce34a00f2ee26128a12a583557605209df1 Mon Sep 17 00:00:00 2001 From: ochafik Date: Fri, 1 Mar 2024 14:14:45 +0000 Subject: [PATCH] json: support additionalProperties (`{[k: string]: [string,number][]}`) --- examples/json-schema-to-grammar.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/examples/json-schema-to-grammar.py b/examples/json-schema-to-grammar.py index 4c2a3675d..a70f14e03 100755 --- a/examples/json-schema-to-grammar.py +++ b/examples/json-schema-to-grammar.py @@ -84,6 +84,18 @@ class SchemaConverter: return self._add_rule(rule_name, rule) + elif schema_type == 'object' and 'additionalProperties' in schema: + additional_properties = schema['additionalProperties'] + if not isinstance(additional_properties, dict): + additional_properties = {} + + sub_name = f'{name}{"-" if name else ""}additionalProperties' + value_rule = self.visit(additional_properties, f'{sub_name}-value') + kv_rule = self._add_rule(f'{sub_name}-kv', f'string ":" space {value_rule}') + return self._add_rule( + rule_name, + f'( {kv_rule} ( "," space {kv_rule} )* )*') + elif schema_type == 'array' and 'items' in schema: # TODO `prefixItems` keyword items = schema['items']