"""Original offline examples, not recorded AI responses. Python 3; no network.""" import json def pairs(values): result = {} for key, value in values: if key in result: raise ValueError('duplicate key') result[key] = value return result def constant(value): raise ValueError('non-standard JSON constant') def validate(text): try: data = json.loads(text, object_pairs_hook=pairs, parse_constant=constant) except (json.JSONDecodeError, ValueError): return 'NG (json)' if type(data) is not dict or set(data) != {'name', 'quantity'}: return 'NG (keys)' if type(data['name']) is not str or not data['name'].strip(): return 'NG (name)' if type(data['quantity']) is not int or not 1 <= data['quantity'] <= 99: return 'NG (quantity)' return 'OK' if __name__ == '__main__': samples = { 'valid': '{"name":"notebook","quantity":2}', 'syntax': '{"name":"notebook","quantity":2,}', 'wrong-type': '{"name":"notebook","quantity":"2"}', 'extra-field': '{"name":"notebook","quantity":2,"price":300}', } for label, text in samples.items(): print(label + ': ' + validate(text))