पाठ 14 / 29
JSON माँगना और उसे Validate करना
Schema तय करें और जो उत्तर मेल न खाएँ उन्हें अस्वीकार करें।
भरोसा करें, पर जाँचें
सटीक JSON आकार (keys, types, अनुमत मान) बताएँ और एक उदाहरण दें। कई providers structured output / JSON mode / schema-constrained decoding भी देते हैं, जिससे अमान्य JSON की संभावना बहुत घटती है; उपलब्ध हो तो उपयोग करें। तब भी कोड में validate करें: JSON parse करें, आवश्यक keys, types, अनुमत enum मान और संख्यात्मक सीमाएँ जाँचें, और विफलताएँ स्पष्ट रूप से सँभालें। मॉडल आउटपुट को अविश्वसनीय इनपुट मानें: कड़ी जाँच के बिना उसे eval, shell commands या SQL में कभी न दें।
मशीन-पठनीय और जाँचा हुआ
कोड उत्तर उपयोग करे तो JSON माँगें, validate करें और विफल होने पर retry करें।
उत्तर validator, चलाकर
मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। चार नमूना उत्तरों में सिर्फ़ पहला पास होता है। बाक़ी अलग कारणों से विफल होते हैं: JSON के आसपास बातूनी पाठ, अनुमत सूची से बाहर category, और 0 से 1 से बाहर 1.7 का confidence।
import json
def parse_reply(raw, allowed=("billing", "technical", "other")):
try:
data = json.loads(raw)
except json.JSONDecodeError as e:
return None, f"not valid JSON: {e.msg}"
if not isinstance(data, dict):
return None, "expected an object"
if data.get("category") not in allowed:
return None, f"category must be one of {allowed}"
if not isinstance(data.get("confidence"), (int, float)) or not 0 <= data["confidence"] <= 1:
return None, "confidence must be a number between 0 and 1"
return data, None
replies = [
'{"category": "billing", "confidence": 0.92}',
'Sure! Here is the JSON: {"category": "billing"}',
'{"category": "refund", "confidence": 0.8}',
'{"category": "other", "confidence": 1.7}',
]
for r in replies:
ok, err = parse_reply(r)
print("OK " if ok else "BAD", ok or err)
Output:
OK {'category': 'billing', 'confidence': 0.92}
BAD not valid JSON: Expecting value
BAD category must be one of ('billing', 'technical', 'other')
BAD confidence must be a number between 0 and 1त्वरित जाँच: JSON mode होने पर भी JSON validate क्यों करें?
- यह सिर्फ़ XML के लिए है
- JSON mode अवैध है
- Validation JSON लंबा करता है
- वैध syntax सही मानों या अनुमत categories की गारंटी नहीं देता
Answer
वैध syntax सही मानों या अनुमत categories की गारंटी नहीं देता — Schema और मान जाँचें वे अर्थगत त्रुटियाँ पकड़ती हैं जो syntax जाँचें चूकती हैं।