JSON چیست؟ آموزش کامل JSON در Python، JavaScript و API هوش مصنوعی

در این آموزش با ساختار و Syntax زبان JSON آشنا می‌شوید، داده JSON را در Python و JavaScript می‌خوانید و می‌سازید و نحوه ارسال و دریافت JSON در APIهای هوش مصنوعی را با مثال واقعی یاد می‌گیرید.

Share
JSON چیست؟ آموزش کامل JSON در Python، JavaScript و API هوش مصنوعی

JSON یکی از مهم‌ترین فرمت‌های تبادل داده در برنامه‌نویسی مدرن است. وقتی یک وب‌سایت اطلاعات کاربر را از Backend دریافت می‌کند، یک اپلیکیشن موبایل به سرور درخواست می‌فرستد یا برنامه‌ای به API هوش مصنوعی متصل می‌شود، داده‌ها در بسیاری از موارد با فرمت JSON جابه‌جا می‌شوند.

اگر با Python، JavaScript، اپلیکیشن موبایل، REST API، Backend، پایگاه داده، هوش مصنوعی یا سرویس‌های تحت وب کار می‌کنید، یادگیری JSON ضروری است.

در این آموزش از مفاهیم پایه شروع می‌کنیم و به‌صورت عملی یاد می‌گیریم:

  • JSON چیست و چه کاربردی دارد؟
  • ساختار صحیح JSON چگونه نوشته می‌شود؟
  • Object، Array، String، Number، Boolean و null چیست؟
  • تفاوت JSON با JavaScript Object و Python Dictionary چیست؟
  • Serialization و Deserialization چه معنایی دارند؟
  • چگونه JSON را در Python بخوانیم و تولید کنیم؟
  • چگونه از JSON.parse() و JSON.stringify() در JavaScript استفاده کنیم؟
  • چگونه فایل JSON بخوانیم و بنویسیم؟
  • چگونه JSON را در HTTP API ارسال و دریافت کنیم؟
  • پاسخ JSON یک API هوش مصنوعی را چگونه پردازش کنیم؟
  • JSON Schema چه کاربردی دارد؟
  • خطاهای رایج JSON چگونه پیدا و برطرف می‌شوند؟

در پایان نیز یک پروژه عملی می‌سازیم که با Python داده JSON را به API هوش مصنوعی درواره ارسال، پاسخ را بررسی و نتیجه را در فایل ذخیره می‌کند.

پاسخ کوتاه: JSON چیست؟

JSON مخفف عبارت زیر است:

JavaScript Object Notation

JSON یک فرمت متنی سبک برای نمایش و تبادل داده‌های ساختاریافته است.

نمونه ساده:

{
  "name": "Darvareh",
  "type": "AI API Platform",
  "active": true,
  "model_count": 100,
  "categories": [
    "text",
    "image",
    "audio",
    "video"
  ]
}

در این مثال اطلاعات یک سرویس به‌صورت مجموعه‌ای از کلیدها و مقدارها نمایش داده شده است.

اگرچه JSON از Syntax اشیای JavaScript الهام گرفته، به JavaScript محدود نیست. تقریباً تمام زبان‌های برنامه‌نویسی مدرن می‌توانند JSON را بخوانند و تولید کنند.

طبق وب‌سایت رسمی JSON، JSON یک فرمت سبک تبادل داده، خوانا برای انسان و قابل Parse و تولید برای ماشین است.

چرا JSON تا این اندازه پرکاربرد است؟

مهم‌ترین دلایل محبوبیت JSON عبارت‌اند از:

  • ساختار آن نسبتاً ساده و خوانا است.
  • متن‌محور است.
  • به زبان برنامه‌نویسی خاصی وابسته نیست.
  • بیشتر زبان‌ها پشتیبانی داخلی یا کتابخانه استاندارد برای آن دارند.
  • برای انتقال داده در HTTP API مناسب است.
  • از Object و Arrayهای تو‌در‌تو پشتیبانی می‌کند.
  • نسبت به بعضی فرمت‌های قدیمی مانند XML کم‌حجم‌تر است.
  • در Browser، Backend، موبایل و Cloud قابل استفاده است.
  • بسیاری از تنظیمات نرم‌افزارها با فایل JSON نگهداری می‌شوند.
  • بیشتر APIهای هوش مصنوعی درخواست و پاسخ JSON دارند.

JSON کجا استفاده می‌شود؟

JSON در بخش‌های مختلف توسعه نرم‌افزار کاربرد دارد:

  • ارتباط Frontend و Backend
  • REST API
  • APIهای هوش مصنوعی
  • فایل‌های تنظیمات
  • ذخیره داده‌های ساختاریافته
  • اپلیکیشن‌های موبایل
  • Webhook
  • Microserviceها
  • Serverless Functionها
  • پایگاه‌های داده Document
  • Logهای ساختاریافته
  • خروجی ابزارهای CLI
  • تبادل داده بین زبان‌های مختلف
  • پیام‌های Queue و Event
  • تعریف Workflow
  • فایل‌های پروژه مانند package.json
  • خروجی Structured Outputs مدل‌های هوش مصنوعی

ساختار اصلی JSON

JSON بر دو ساختار اصلی بنا شده است:

  1. Object یا مجموعه کلید و مقدار
  2. Array یا فهرست مرتب مقادیر

یک Object با { شروع و با } تمام می‌شود:

{
  "name": "Sara",
  "age": 29
}

یک Array با [ شروع و با ] تمام می‌شود:

[
  "Python",
  "JavaScript",
  "Go"
]

این ساختارها می‌توانند داخل یکدیگر قرار بگیرند:

{
  "user": {
    "id": 125,
    "name": "Sara"
  },
  "skills": [
    "Python",
    "Data Analysis"
  ]
}

انواع داده در JSON

JSON از انواع داده محدودی پشتیبانی می‌کند.

نوع دادهنمونه
Object{"name": "Ali"}
Array["Python", "Go"]
String"Hello"
Number125 یا 19.75
Booleantrue یا false
Nullnull

JSON نوع مستقلی برای Date، Time، Binary، Function، Class یا Undefined ندارد.

Object در JSON

Object مجموعه‌ای از جفت‌های Key و Value است:

{
  "product_id": 1042,
  "title": "AI API Credit",
  "price": 500000,
  "available": true
}

در JSON:

  • Key باید داخل Double Quote نوشته شود.
  • بعد از Key علامت : قرار می‌گیرد.
  • جفت‌های Key و Value با , جدا می‌شوند.
  • بعد از آخرین مقدار نباید Comma قرار گیرد.

نمونه نامعتبر:

{
  product_id: 1042,
  "title": "AI API Credit",
}

دو مشکل دارد:

  • کلید product_id داخل Double Quote نیست.
  • بعد از آخرین Property کامای اضافه وجود دارد.

نسخه صحیح:

{
  "product_id": 1042,
  "title": "AI API Credit"
}

Array در JSON

Array فهرستی مرتب از مقادیر است:

{
  "models": [
    "model-a",
    "model-b",
    "model-c"
  ]
}

اعضای Array می‌توانند از نوع‌های مختلف باشند:

[
  "text",
  100,
  true,
  null,
  {
    "name": "example"
  },
  [
    1,
    2,
    3
  ]
]

اگرچه این ساختار معتبر است، استفاده بی‌دلیل از نوع‌های متفاوت در یک Array می‌تواند پردازش و Validation داده را دشوار کند.

برای داده‌های قابل پیش‌بینی بهتر است اعضای یک Array ساختار مشابهی داشته باشند:

[
  {
    "id": 1,
    "name": "Model A"
  },
  {
    "id": 2,
    "name": "Model B"
  }
]

String در JSON

String باید داخل Double Quote قرار گیرد:

{
  "message": "سلام دنیا"
}

استفاده از Single Quote معتبر نیست:

{
  'message': 'سلام دنیا'
}

برای قراردادن Double Quote داخل String باید از Escape استفاده کنید:

{
  "message": "او گفت: \"سلام\""
}

کاراکترهای Escape رایج:

Escapeکاربرد
\"Double Quote
\\Backslash
\nخط جدید
\rCarriage Return
\tTab
\uXXXXکاراکتر Unicode

نمونه:

{
  "text": "خط اول\nخط دوم"
}

Number در JSON

JSON از عدد صحیح و اعشاری پشتیبانی می‌کند:

{
  "users": 1250,
  "temperature": 0.3,
  "balance": -5000,
  "small_value": 1.5e-6
}

مقادیر زیر در JSON استاندارد معتبر نیستند:

NaN
Infinity
-Infinity
0xFF

همچنین عدد نباید داخل Quote قرار گیرد، مگر اینکه عمداً بخواهید آن را به‌صورت String نگه دارید.

عدد:

{
  "price": 250000
}

رشته:

{
  "price": "250000"
}

این دو مقدار از نظر نوع داده یکسان نیستند.

Boolean در JSON

مقادیر Boolean در JSON با حروف کوچک نوشته می‌شوند:

{
  "active": true,
  "deleted": false
}

نسخه‌های زیر نامعتبر هستند:

True
False
TRUE
FALSE

در Python از True و False استفاده می‌شود، اما هنگام تبدیل به JSON کتابخانه استاندارد آن‌ها را به true و false تبدیل می‌کند.

null در JSON

null نشان می‌دهد مقدار وجود ندارد یا نامشخص است:

{
  "name": "Ali",
  "phone": null
}

وجود کلید با مقدار null با نبودن کلید تفاوت دارد.

نمونه اول:

{
  "phone": null
}

نمونه دوم:

{}

در نمونه اول کلید phone وجود دارد، اما مقدار ندارد. در نمونه دوم کلید اصلاً ارسال نشده است. API باید معنای این دو وضعیت را مشخص کند.

آیا ریشه JSON حتماً باید Object باشد؟

خیر. ریشه یک سند JSON می‌تواند Object، Array یا حتی یک مقدار ساده باشد.

تمام نمونه‌های زیر JSON معتبر هستند:

{
  "name": "Ali"
}
[
  1,
  2,
  3
]
"hello"
125
true
null

بااین‌حال، بیشتر APIها در سطح ریشه از Object استفاده می‌کنند تا امکان افزودن فیلدهای جدید وجود داشته باشد.

JSON تو‌در‌تو

Object و Array می‌توانند چند سطح داخل یکدیگر قرار گیرند:

{
  "user": {
    "id": 502,
    "profile": {
      "name": "Nima",
      "languages": [
        {
          "name": "Python",
          "level": "advanced"
        },
        {
          "name": "JavaScript",
          "level": "intermediate"
        }
      ]
    }
  }
}

این ساختار معتبر است، اما تو‌در‌تویی بیش‌ازحد خوانایی و نگهداری API را کاهش می‌دهد. ساختار داده را بر اساس نیاز واقعی طراحی کنید.

تفاوت JSON با JavaScript Object

این دو شبیه‌اند، اما یکسان نیستند.

JavaScript Object:

const user = {
  name: "Sara",
  age: 28,
  active: true,
  greet() {
    return "Hello";
  },
};

JSON:

{
  "name": "Sara",
  "age": 28,
  "active": true
}

تفاوت‌ها:

ویژگیJSONJavaScript Object
ماهیتمتنشیء داخل حافظه
Quote کلیدالزامیهمیشه الزامی نیست
Stringفقط Double QuoteSingle یا Double Quote
Functionپشتیبانی نمی‌شودپشتیبانی می‌شود
undefinedندارددارد
Commentندارددارد
Trailing Commaمجاز نیستدر بسیاری موارد مجاز است
Parseلازم استاز قبل Object است

عبارت زیر JavaScript معتبر است، اما JSON معتبر نیست:

{
  name: "Ali",
  value: undefined,
}

تفاوت JSON با Python Dictionary

Python Dictionary:

user = {
    "name": "Sara",
    "active": True,
    "phone": None,
}

JSON معادل:

{
  "name": "Sara",
  "active": true,
  "phone": null
}

تفاوت مقدارها:

PythonJSON
dictObject
list یا tupleArray
strString
int و floatNumber
Truetrue
Falsefalse
Nonenull

Python Dictionary یک Object داخل حافظه برنامه است. JSON متن دارای Syntax استاندارد است.

JSON با String چه تفاوتی دارد؟

این مقدار یک Dictionary پایتون است:

data = {
    "name": "Darvareh",
    "active": True,
}

این مقدار یک String حاوی JSON است:

json_text = """
{
  "name": "Darvareh",
  "active": true
}
"""

برای دسترسی به مقدار name در حالت دوم، ابتدا باید متن JSON را Parse کنید.

Serialization و Deserialization چیست؟

Serialization یعنی تبدیل Object داخلی برنامه به متن JSON.

مثال:

Python Dictionary
        ↓
JSON String

Deserialization یعنی تبدیل متن JSON به Object قابل استفاده در برنامه.

مثال:

JSON String
        ↓
Python Dictionary

در Python:

  • json.dumps() برای Serialization به String
  • json.loads() برای Deserialization از String
  • json.dump() برای نوشتن در فایل
  • json.load() برای خواندن از فایل

در JavaScript:

  • JSON.stringify() برای Serialization
  • JSON.parse() برای Deserialization

کار با JSON در Python

Python کتابخانه داخلی json دارد و برای استفاده پایه به نصب پکیج جداگانه نیاز نیست.

import json

تبدیل Dictionary پایتون به JSON

import json


user = {
    "id": 101,
    "name": "سارا",
    "active": True,
    "phone": None,
    "skills": [
        "Python",
        "Data Analysis",
    ],
}

json_text = json.dumps(user)

print(json_text)
print(type(json_text))

خروجی json.dumps() یک String است، نه Dictionary.

نمایش صحیح متن فارسی در Python

رفتار پیش‌فرض ممکن است کاراکترهای فارسی را به Unicode Escape تبدیل کند:

"\u0633\u0627\u0631\u0627"

برای نمایش خوانای فارسی:

json_text = json.dumps(
    user,
    ensure_ascii=False,
)

print(json_text)

خروجی:

{
  "id": 101,
  "name": "سارا",
  "active": true,
  "phone": null,
  "skills": ["Python", "Data Analysis"]
}

Pretty Print کردن JSON

برای خوانایی بیشتر از indent استفاده کنید:

pretty_json = json.dumps(
    user,
    ensure_ascii=False,
    indent=2,
)

print(pretty_json)

خروجی:

{
  "id": 101,
  "name": "سارا",
  "active": true,
  "phone": null,
  "skills": [
    "Python",
    "Data Analysis"
  ]
}

در APIهای واقعی، Pretty Print معمولاً ضروری نیست و حجم داده را کمی افزایش می‌دهد. برای Log یا فایل قابل خواندن مفید است.

تبدیل JSON String به Dictionary

import json


json_text = """
{
  "id": 101,
  "name": "سارا",
  "active": true,
  "phone": null
}
"""

data = json.loads(json_text)

print(data)
print(type(data))
print(data["name"])

تبدیل‌ها به شکل زیر انجام می‌شوند:

JSON object → Python dict
JSON array → Python list
JSON true → Python True
JSON false → Python False
JSON null → Python None

مدیریت JSON نامعتبر در Python

اگر Syntax اشتباه باشد، json.loads() خطای JSONDecodeError ایجاد می‌کند:

import json


invalid_json = """
{
  "name": "Ali",
}
"""

try:
    data = json.loads(invalid_json)
except json.JSONDecodeError as error:
    print(f"Invalid JSON: {error}")

برای نمایش اطلاعات دقیق‌تر:

try:
    data = json.loads(invalid_json)
except json.JSONDecodeError as error:
    print(f"Message: {error.msg}")
    print(f"Line: {error.lineno}")
    print(f"Column: {error.colno}")
    print(f"Position: {error.pos}")

در این مثال، کامای بعد از آخرین مقدار باعث خطا شده است.

نوشتن JSON در فایل با Python

import json
from pathlib import Path


data = {
    "project": "Darvareh Client",
    "version": 1,
    "enabled": True,
    "features": [
        "chat",
        "analysis",
        "summarization",
    ],
}

file_path = Path("config.json")

with file_path.open(
    "w",
    encoding="utf-8",
) as file:
    json.dump(
        data,
        file,
        ensure_ascii=False,
        indent=2,
    )

فایل config.json ساخته می‌شود.

خواندن فایل JSON با Python

import json
from pathlib import Path


file_path = Path("config.json")

if not file_path.exists():
    raise FileNotFoundError(
        f"File not found: {file_path}"
    )

with file_path.open(
    "r",
    encoding="utf-8",
) as file:
    config = json.load(file)

print(config["project"])
print(config["features"])

نام تابع‌ها را با هم اشتباه نکنید:

تابعورودی یا خروجی
json.dumps()Object پایتون به String
json.loads()String به Object پایتون
json.dump()Object پایتون به فایل
json.load()فایل به Object پایتون

حرف s در dumps و loads را می‌توان به‌صورت String به خاطر سپرد.

ذخیره Date در JSON با Python

JSON نوع Date ندارد. این کد مستقیم قابل Serialize نیست:

from datetime import datetime
import json


data = {
    "created_at": datetime.now(),
}

json.dumps(data)

راه ساده، تبدیل تاریخ به String استاندارد است:

from datetime import datetime, timezone
import json


data = {
    "created_at": (
        datetime.now(timezone.utc)
        .isoformat()
    ),
}

json_text = json.dumps(
    data,
    ensure_ascii=False,
)

print(json_text)

نمونه خروجی:

{
  "created_at": "2026-08-06T10:30:00+00:00"
}

هنگام خواندن باید مشخص کنید کدام فیلدها Date هستند و آن‌ها را دوباره Parse کنید.

دقت اعداد در JSON

JSON یک نوع عمومی Number دارد، اما زبان‌های برنامه‌نویسی ممکن است عددها را با دقت متفاوت نگه دارند.

برای مقادیر حساس به دقت مانند مبلغ مالی، نباید بدون بررسی به float وابسته باشید.

در Python می‌توانید عدد اعشاری JSON را با Decimal Parse کنید:

import json
from decimal import Decimal


json_text = """
{
  "price": 19.99
}
"""

data = json.loads(
    json_text,
    parse_float=Decimal,
)

print(data["price"])
print(type(data["price"]))

اما Decimal نیز مستقیماً با json.dumps() قابل Serialize نیست و به Encoder یا تبدیل کنترل‌شده نیاز دارد. قرارداد نمایش عدد و واحد آن را در API به‌وضوح تعریف کنید.

کار با JSON در JavaScript

JavaScript به‌صورت داخلی Object سراسری JSON را ارائه می‌دهد.

دو متد اصلی:

JSON.parse()
JSON.stringify()

تبدیل JSON String به JavaScript Object

const jsonText = `{
  "name": "Sara",
  "active": true,
  "skills": ["JavaScript", "React"]
}`;

try {
  const user = JSON.parse(jsonText);

  console.log(user.name);
  console.log(user.skills[0]);
} catch (error) {
  console.error("Invalid JSON:", error.message);
}

JSON.parse() در صورت نامعتبر بودن متن، SyntaxError ایجاد می‌کند.

تبدیل JavaScript Object به JSON

const user = {
  id: 101,
  name: "Sara",
  active: true,
  skills: ["JavaScript", "React"],
};

const jsonText = JSON.stringify(user);

console.log(jsonText);

برای Pretty Print:

const prettyJson = JSON.stringify(
  user,
  null,
  2,
);

console.log(prettyJson);

پارامتر سوم تعداد فاصله‌های Indent را مشخص می‌کند.

رفتار undefined و Function در JSON.stringify

مقادیر undefined و Function معادل مستقیمی در JSON ندارند.

const data = {
  name: "Sara",
  value: undefined,
  greet() {
    return "Hello";
  },
};

console.log(JSON.stringify(data));

خروجی:

{
  "name": "Sara"
}

Propertyهای دارای undefined و Function حذف می‌شوند.

در Array، undefined ممکن است به null تبدیل شود:

console.log(
  JSON.stringify([
    1,
    undefined,
    3,
  ])
);

خروجی:

[
  1,
  null,
  3
]

بنابراین پیش از Serialization باید قرارداد داده را مشخص کنید.

BigInt و JSON در JavaScript

JSON.stringify() به‌صورت پیش‌فرض نمی‌تواند BigInt را Serialize کند:

const value = 12345678901234567890n;

JSON.stringify({
  value,
});

این عملیات خطا ایجاد می‌کند. اگر عدد بسیار بزرگ است، می‌توانید آن را با قرارداد مشخص به String تبدیل کنید:

const data = {
  value: value.toString(),
};

سرویس دریافت‌کننده باید بداند این String نماینده یک عدد بزرگ است.

دریافت JSON با Fetch API

async function loadModels() {
  const response = await fetch(
    "https://example.com/api/models",
    {
      headers: {
        Accept: "application/json",
      },
    },
  );

  if (!response.ok) {
    const errorText = await response.text();

    throw new Error(
      `Request failed: ${response.status} ${errorText}`,
    );
  }

  const data = await response.json();

  return data;
}

متد response.json() بدنه پاسخ را به Object یا Array جاوااسکریپت تبدیل می‌کند.

پیش از Parse بهتر است Status Code و در صورت نیاز Content-Type بررسی شود.

ارسال JSON با Fetch API

async function createItem(item) {
  const response = await fetch(
    "https://example.com/api/items",
    {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Accept: "application/json",
      },
      body: JSON.stringify(item),
    },
  );

  if (!response.ok) {
    throw new Error(
      `Request failed with ${response.status}`,
    );
  }

  return response.json();
}

قرارندادن JSON.stringify() باعث می‌شود Object جاوااسکریپت مستقیماً به بدنه HTTP تبدیل نشود.

Content-Type در JSON API

درخواست JSON معمولاً این Header را دارد:

Content-Type: application/json

این Header به سرور می‌گوید بدنه درخواست JSON است.

Header زیر بیان می‌کند Client انتظار پاسخ JSON دارد:

Accept: application/json

این دو Header نقش متفاوتی دارند:

Headerمفهوم
Content-Typeفرمت بدنه‌ای که ارسال می‌شود
Acceptفرمت پاسخ مورد انتظار

JSON در HTTP API چگونه منتقل می‌شود؟

نمونه درخواست:

POST /v1/items HTTP/1.1
Host: api.example.com
Content-Type: application/json
Accept: application/json

{
  "name": "Example",
  "active": true
}

نمونه پاسخ:

HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": 120,
  "name": "Example",
  "active": true
}

JSON فقط بدنه داده است. Method، URL، Header و Status Code بخشی از HTTP هستند، نه JSON.

نمونه درخواست JSON با cURL

curl \
  --request POST \
  --url https://api.example.com/v1/items \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --data '{
    "name": "Example",
    "active": true
  }'

در Windows PowerShell، نحوه Quote و Escape ممکن است با Bash متفاوت باشد. اگر با خطای Syntax مواجه شدید، بدنه را داخل فایل JSON ذخیره کنید.

فایل request.json:

{
  "name": "Example",
  "active": true
}

ارسال فایل:

curl \
  --request POST \
  --url https://api.example.com/v1/items \
  --header "Content-Type: application/json" \
  --data @request.json

این روش برای Payloadهای طولانی خواناتر است.

ارسال JSON با requests در Python

import requests


payload = {
    "name": "Example",
    "active": True,
}

response = requests.post(
    "https://api.example.com/v1/items",
    json=payload,
    timeout=30,
)

response.raise_for_status()

data = response.json()

print(data)

پارامتر json=payload معمولاً این کارها را انجام می‌دهد:

  • Object پایتون را به JSON تبدیل می‌کند.
  • بدنه درخواست را تنظیم می‌کند.
  • Header مناسب JSON را قرار می‌دهد.

روش زیر نیز ممکن است، اما دستی‌تر است:

import json
import requests


response = requests.post(
    "https://api.example.com/v1/items",
    data=json.dumps(payload),
    headers={
        "Content-Type": "application/json",
    },
    timeout=30,
)

برای بیشتر درخواست‌های معمول، json=payload ساده‌تر و کم‌خطاتر است.

آیا response.json همیشه موفق است؟

خیر. یک سرور ممکن است در زمان خطا HTML، متن ساده یا بدنه خالی برگرداند.

نمونه مدیریت بهتر:

import requests


response = requests.get(
    "https://api.example.com/v1/items",
    timeout=30,
)

try:
    response.raise_for_status()
except requests.HTTPError as error:
    preview = response.text[:300]

    raise RuntimeError(
        f"HTTP {response.status_code}: {preview}"
    ) from error

try:
    data = response.json()
except requests.JSONDecodeError as error:
    content_type = response.headers.get(
        "Content-Type",
        "",
    )

    raise RuntimeError(
        "Expected JSON but received "
        f"Content-Type={content_type}"
    ) from error

حتی اگر HTTP Status موفق باشد، ساختار داده باید جداگانه بررسی شود.

JSON در API هوش مصنوعی

در بیشتر APIهای مدل‌های زبانی، درخواست شامل مواردی مانند این‌ها است:

  • Model ID
  • Messages
  • Temperature
  • Max Tokens
  • ابزارها
  • Response Format
  • تنظیمات Streaming

نمونه درخواست:

{
  "model": "YOUR_MODEL_ID",
  "messages": [
    {
      "role": "system",
      "content": "پاسخ دقیق و کوتاه ارائه کن."
    },
    {
      "role": "user",
      "content": "JSON را در یک جمله تعریف کن."
    }
  ],
  "temperature": 0.2
}

پاسخ نیز معمولاً JSON است:

{
  "id": "request-example",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "JSON یک فرمت متنی سبک برای تبادل داده‌های ساختاریافته است."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 18,
    "total_tokens": 43
  }
}

ساختار دقیق پاسخ می‌تواند به Endpoint، مدل و قابلیت مورد استفاده وابسته باشد.

اتصال به API هوش مصنوعی درواره با JSON و cURL

برای دریافت API Key در درواره ثبت‌نام کنید. شناسه مدل را نیز از صفحه مدل‌ها و قیمت‌های درواره بردارید.

نمونه درخواست:

curl \
  --request POST \
  --url https://api.darvareh.ir/v1/chat/completions \
  --header "Authorization: Bearer YOUR_DARVAREH_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "YOUR_MODEL_ID",
    "messages": [
      {
        "role": "system",
        "content": "پاسخ را به زبان فارسی و دقیق ارائه کن."
      },
      {
        "role": "user",
        "content": "JSON چیست؟"
      }
    ],
    "temperature": 0.2
  }'

API Key را داخل مخزن Git، کد Frontend، Screenshot یا فایل قابل انتشار قرار ندهید.

اتصال به API درواره با Python

ابتدا کتابخانه‌ها را نصب کنید:

python -m pip install requests python-dotenv

فایل .env:

DARVAREH_API_KEY=YOUR_DARVAREH_API_KEY
DARVAREH_MODEL_ID=YOUR_MODEL_ID

فایل .gitignore:

.env
.venv/
__pycache__/
*.pyc

کد Python:

import os

import requests
from dotenv import load_dotenv


load_dotenv()

api_key = os.getenv("DARVAREH_API_KEY")
model_id = os.getenv("DARVAREH_MODEL_ID")

if not api_key:
    raise RuntimeError(
        "DARVAREH_API_KEY is not configured."
    )

if not model_id:
    raise RuntimeError(
        "DARVAREH_MODEL_ID is not configured."
    )

payload = {
    "model": model_id,
    "messages": [
        {
            "role": "system",
            "content": (
                "پاسخ را دقیق و به زبان فارسی "
                "ارائه کن."
            ),
        },
        {
            "role": "user",
            "content": "JSON چیست؟",
        },
    ],
    "temperature": 0.2,
}

response = requests.post(
    "https://api.darvareh.ir/v1/chat/completions",
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    json=payload,
    timeout=60,
)

try:
    response.raise_for_status()
except requests.HTTPError as error:
    preview = response.text[:500]

    raise RuntimeError(
        f"API error {response.status_code}: "
        f"{preview}"
    ) from error

try:
    result = response.json()
except requests.JSONDecodeError as error:
    raise RuntimeError(
        "The API did not return valid JSON."
    ) from error

try:
    content = (
        result["choices"][0]["message"]["content"]
    )
except (KeyError, IndexError, TypeError) as error:
    raise RuntimeError(
        "Unexpected API response structure."
    ) from error

print(content)

اتصال به API درواره با JavaScript

کلید API باید در Backend نگهداری شود، نه در JavaScript اجراشده داخل Browser.

نمونه برای Node.js:

const apiKey = process.env.DARVAREH_API_KEY;
const modelId = process.env.DARVAREH_MODEL_ID;

if (!apiKey) {
  throw new Error(
    "DARVAREH_API_KEY is not configured",
  );
}

if (!modelId) {
  throw new Error(
    "DARVAREH_MODEL_ID is not configured",
  );
}

const payload = {
  model: modelId,
  messages: [
    {
      role: "system",
      content: "پاسخ را دقیق و فارسی ارائه کن.",
    },
    {
      role: "user",
      content: "JSON چیست؟",
    },
  ],
  temperature: 0.2,
};

const response = await fetch(
  "https://api.darvareh.ir/v1/chat/completions",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${apiKey}`,
      "Content-Type": "application/json",
      Accept: "application/json",
    },
    body: JSON.stringify(payload),
  },
);

const responseText = await response.text();

if (!response.ok) {
  throw new Error(
    `API error ${response.status}: ` +
      responseText.slice(0, 500),
  );
}

let result;

try {
  result = JSON.parse(responseText);
} catch {
  throw new Error(
    "The API did not return valid JSON",
  );
}

const content =
  result?.choices?.[0]?.message?.content;

if (typeof content !== "string") {
  throw new Error(
    "Unexpected API response structure",
  );
}

console.log(content);

پروژه عملی: پردازش JSON و ذخیره پاسخ API

در این پروژه:

  1. درخواست را از فایل JSON می‌خوانیم.
  2. ساختار اولیه آن را بررسی می‌کنیم.
  3. درخواست را به API درواره می‌فرستیم.
  4. پاسخ JSON را Parse می‌کنیم.
  5. اطلاعات ضروری را استخراج می‌کنیم.
  6. نتیجه را در فایل JSON ذخیره می‌کنیم.

ساختار پروژه

json-ai-project/
├── .env
├── .gitignore
├── request.json
├── result.json
└── main.py

فایل request.json

{
  "task": "summarize",
  "language": "fa",
  "text": "JSON یک فرمت متنی سبک برای نمایش و تبادل داده‌های ساختاریافته است. این فرمت در APIهای وب، فایل‌های تنظیمات و ارتباط بین سرویس‌ها کاربرد گسترده‌ای دارد.",
  "settings": {
    "max_sentences": 2,
    "tone": "professional"
  }
}

برنامه کامل Python

import json
import os
from pathlib import Path
from typing import Any

import requests
from dotenv import load_dotenv


DARVAREH_CHAT_URL = (
    "https://api.darvareh.ir/v1/chat/completions"
)


def load_json_file(
    file_path: Path,
) -> dict[str, Any]:
    if not file_path.exists():
        raise FileNotFoundError(
            f"File not found: {file_path}"
        )

    try:
        with file_path.open(
            "r",
            encoding="utf-8",
        ) as file:
            data = json.load(file)
    except json.JSONDecodeError as error:
        raise ValueError(
            "Invalid JSON in "
            f"{file_path.name}: "
            f"line {error.lineno}, "
            f"column {error.colno}"
        ) from error

    if not isinstance(data, dict):
        raise ValueError(
            "The root JSON value must be an object."
        )

    return data


def validate_request(
    data: dict[str, Any],
) -> None:
    required_fields = {
        "task",
        "language",
        "text",
        "settings",
    }

    missing_fields = required_fields.difference(
        data.keys()
    )

    if missing_fields:
        raise ValueError(
            "Missing required fields: "
            f"{sorted(missing_fields)}"
        )

    if data["task"] != "summarize":
        raise ValueError(
            "Only the summarize task is supported."
        )

    if not isinstance(data["text"], str):
        raise ValueError(
            "text must be a string."
        )

    if not data["text"].strip():
        raise ValueError(
            "text cannot be empty."
        )

    if not isinstance(data["settings"], dict):
        raise ValueError(
            "settings must be an object."
        )

    max_sentences = data["settings"].get(
        "max_sentences"
    )

    if not isinstance(max_sentences, int):
        raise ValueError(
            "max_sentences must be an integer."
        )

    if not 1 <= max_sentences <= 10:
        raise ValueError(
            "max_sentences must be between 1 and 10."
        )


def build_prompt(
    data: dict[str, Any],
) -> str:
    settings = data["settings"]

    return f"""
متن زیر را خلاصه کن:

{data["text"]}

زبان خروجی: {data["language"]}
حداکثر تعداد جمله: {settings["max_sentences"]}
لحن: {settings.get("tone", "neutral")}

فقط خلاصه را برگردان.
اطلاعاتی خارج از متن اضافه نکن.
""".strip()


def call_darvareh(
    prompt: str,
    api_key: str,
    model_id: str,
) -> dict[str, Any]:
    payload = {
        "model": model_id,
        "messages": [
            {
                "role": "system",
                "content": (
                    "تو یک دستیار دقیق برای "
                    "خلاصه‌سازی متن هستی."
                ),
            },
            {
                "role": "user",
                "content": prompt,
            },
        ],
        "temperature": 0.2,
    }

    try:
        response = requests.post(
            DARVAREH_CHAT_URL,
            headers={
                "Authorization": (
                    f"Bearer {api_key}"
                ),
                "Content-Type": "application/json",
            },
            json=payload,
            timeout=60,
        )
    except requests.Timeout as error:
        raise RuntimeError(
            "The API request timed out."
        ) from error
    except requests.ConnectionError as error:
        raise RuntimeError(
            "Could not connect to the API."
        ) from error

    try:
        response.raise_for_status()
    except requests.HTTPError as error:
        preview = response.text[:500]

        raise RuntimeError(
            f"API error {response.status_code}: "
            f"{preview}"
        ) from error

    try:
        result = response.json()
    except requests.JSONDecodeError as error:
        raise RuntimeError(
            "The API response is not valid JSON."
        ) from error

    if not isinstance(result, dict):
        raise RuntimeError(
            "The API response root must be an object."
        )

    return result


def extract_content(
    result: dict[str, Any],
) -> str:
    try:
        content = (
            result["choices"][0]
            ["message"]["content"]
        )
    except (
        KeyError,
        IndexError,
        TypeError,
    ) as error:
        raise RuntimeError(
            "Unexpected API response structure."
        ) from error

    if not isinstance(content, str):
        raise RuntimeError(
            "Response content must be a string."
        )

    return content.strip()


def save_result(
    output_path: Path,
    request_data: dict[str, Any],
    content: str,
    api_result: dict[str, Any],
) -> None:
    output = {
        "task": request_data["task"],
        "result": content,
        "model": api_result.get("model"),
        "usage": api_result.get("usage"),
    }

    with output_path.open(
        "w",
        encoding="utf-8",
    ) as file:
        json.dump(
            output,
            file,
            ensure_ascii=False,
            indent=2,
        )


def main() -> None:
    load_dotenv()

    api_key = os.getenv("DARVAREH_API_KEY")
    model_id = os.getenv("DARVAREH_MODEL_ID")

    if not api_key:
        raise RuntimeError(
            "DARVAREH_API_KEY is not configured."
        )

    if not model_id:
        raise RuntimeError(
            "DARVAREH_MODEL_ID is not configured."
        )

    project_root = Path(__file__).resolve().parent
    request_path = project_root / "request.json"
    output_path = project_root / "result.json"

    request_data = load_json_file(request_path)
    validate_request(request_data)

    prompt = build_prompt(request_data)

    api_result = call_darvareh(
        prompt=prompt,
        api_key=api_key,
        model_id=model_id,
    )

    content = extract_content(api_result)

    save_result(
        output_path=output_path,
        request_data=request_data,
        content=content,
        api_result=api_result,
    )

    print(f"Result saved to: {output_path}")


if __name__ == "__main__":
    main()

اجرای پروژه

python main.py

نمونه فایل result.json:

{
  "task": "summarize",
  "result": "JSON یک فرمت سبک و متنی برای تبادل داده‌های ساختاریافته است که در APIها، تنظیمات نرم‌افزار و ارتباط میان سرویس‌ها استفاده می‌شود.",
  "model": "YOUR_MODEL_ID",
  "usage": {
    "prompt_tokens": 80,
    "completion_tokens": 35,
    "total_tokens": 115
  }
}

مقدارها و ساختار دقیق پاسخ با توجه به مدل و Endpoint ممکن است متفاوت باشد. برنامه نباید بدون Validation به وجود تمام فیلدهای اختیاری وابسته باشد.

چرا فقط Parse کردن JSON کافی نیست؟

معتبر بودن Syntax JSON به معنی درست بودن داده نیست.

این JSON از نظر Syntax معتبر است:

{
  "email": 125,
  "age": -50,
  "active": "yes"
}

اما ممکن است با قرارداد برنامه ناسازگار باشد:

  • email باید String باشد.
  • age نباید منفی باشد.
  • active باید Boolean باشد.

پس سه مرحله متفاوت داریم:

  1. Parse کردن JSON
  2. اعتبارسنجی ساختار و نوع داده
  3. اعتبارسنجی قواعد کسب‌وکار

JSON Schema چیست؟

JSON Schema روشی استاندارد برای توصیف ساختار مورد انتظار یک سند JSON است.

Schema می‌تواند مشخص کند:

  • ریشه Object است یا Array
  • چه Propertyهایی مجاز هستند
  • نوع هر Property چیست
  • چه فیلدهایی Required هستند
  • مقدار عددی در چه بازه‌ای است
  • String چه Pattern یا طولی دارد
  • چه مقادیری برای Enum مجاز هستند
  • آیا Property اضافی پذیرفته می‌شود

نمونه Schema:

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1
    },
    "age": {
      "type": "integer",
      "minimum": 0
    },
    "active": {
      "type": "boolean"
    }
  },
  "required": [
    "name",
    "active"
  ],
  "additionalProperties": false
}

داده معتبر:

{
  "name": "Sara",
  "age": 28,
  "active": true
}

داده نامعتبر:

{
  "name": "",
  "age": -5,
  "active": "yes"
}

برای یادگیری مرحله‌به‌مرحله می‌توانید راهنمای رسمی JSON Schema را ببینید.

JSON معمولی، JSON Mode و Structured Outputs

این مفاهیم را با هم اشتباه نگیرید.

JSON معمولی

فقط یک فرمت داده است. برنامه متن JSON را Parse می‌کند.

درخواست پرامپتی برای JSON

از مدل می‌خواهید در پاسخ JSON تولید کند. مدل ممکن است متن اضافه، Markdown یا ساختار اشتباه برگرداند.

JSON Mode

در مدل‌های پشتیبانی‌شده می‌تواند تولید JSON قابل Parse را قابل‌پیش‌بینی‌تر کند، اما لزوماً تمام فیلدها و نوع‌های مورد انتظار شما را تضمین نمی‌کند.

Structured Outputs

در مدل‌ها و APIهای پشتیبانی‌شده، ساختار پاسخ با JSON Schema تعریف می‌شود تا خروجی با قرارداد مشخص هماهنگ‌تر باشد.

پشتیبانی از JSON Mode، Structured Outputs و Schema به مدل و Endpoint وابسته است. قبل از استفاده، قابلیت مدل انتخابی را بررسی کنید.

آیا خروجی JSON مدل را می‌توان مستقیم استفاده کرد؟

خیر. حتی اگر پاسخ از نظر Syntax معتبر باشد باید:

  1. JSON را Parse کنید.
  2. آن را با Schema اعتبارسنجی کنید.
  3. قواعد کسب‌وکار را بررسی کنید.
  4. مقدارهای حساس را محدود کنید.
  5. عملیات مجاز کاربر را بررسی کنید.
  6. قبل از ذخیره یا اجرای عملیات اثرگذار، کنترل‌های برنامه را اعمال کنید.

JSON معتبر می‌تواند حاوی اطلاعات اشتباه یا نامناسب باشد. ساختار صحیح، صحت معنایی محتوا را تضمین نمی‌کند.

خطاهای رایج JSON

استفاده از Single Quote

نامعتبر:

{
  'name': 'Ali'
}

صحیح:

{
  "name": "Ali"
}

کلید بدون Double Quote

نامعتبر:

{
  name: "Ali"
}

صحیح:

{
  "name": "Ali"
}

کامای اضافه

نامعتبر:

{
  "name": "Ali",
}

صحیح:

{
  "name": "Ali"
}

نوشتن Comment

نامعتبر:

{
  // User name
  "name": "Ali"
}

JSON استاندارد از Comment پشتیبانی نمی‌کند.

در صورت نیاز به توضیح می‌توانید فیلدی مانند _description تعریف کنید، اما مصرف‌کننده باید آن را بشناسد:

{
  "_description": "Application settings",
  "enabled": true
}

استفاده از True و False

نامعتبر:

{
  "active": True
}

صحیح:

{
  "active": true
}

استفاده از None

نامعتبر:

{
  "phone": None
}

صحیح:

{
  "phone": null
}

Double Quote بدون Escape

نامعتبر:

{
  "message": "او گفت "سلام""
}

صحیح:

{
  "message": "او گفت \"سلام\""
}

استفاده از undefined

نامعتبر:

{
  "value": undefined
}

در JSON باید مقدار حذف یا با توجه به قرارداد به null تبدیل شود:

{
  "value": null
}

قراردادن JSON داخل String اضافی

گاهی پاسخ واقعی به شکل زیر است:

"{\"name\":\"Ali\",\"active\":true}"

این مقدار یک JSON String است که داخل آن متن JSON دیگری قرار دارد. پس از Parse اول، هنوز String دارید و ممکن است به Parse دوم نیاز باشد.

وجود این وضعیت معمولاً نشان می‌دهد داده در یک مرحله بیش‌ازحد Serialize شده است.

JSON داخل Markdown

مدل ممکن است پاسخ دهد:

```json
{
  "category": "technical"
}
```

این متن به‌صورت مستقیم JSON معتبر نیست؛ زیرا Fenceهای Markdown بخشی از JSON نیستند. بهتر است از قابلیت خروجی ساختاریافته مدل استفاده کنید و از حذف دستی Fenceها به‌عنوان قرارداد اصلی Production استفاده نکنید.

Propertyهای تکراری

نمونه:

{
  "status": "active",
  "status": "disabled"
}

Parserهای مختلف ممکن است رفتار متفاوتی داشته باشند و اغلب یکی از مقدارها را نگه می‌دارند. از Key تکراری استفاده نکنید و در Validation آن را تشخیص دهید.

روش پیدا‌کردن خطای JSON

برای عیب‌یابی:

  1. شماره خط و ستون خطا را بخوانید.
  2. Quoteهای باز و بسته را بررسی کنید.
  3. کامای آخر Object و Array را حذف کنید.
  4. مطمئن شوید Keyها داخل Double Quote هستند.
  5. True، False و None را اصلاح کنید.
  6. Commentها را حذف کنید.
  7. Escape داخل Stringها را بررسی کنید.
  8. Brace و Bracketها را جفت کنید.
  9. Encoding فایل را روی UTF-8 نگه دارید.
  10. داده را با Parser واقعی زبان مقصد آزمایش کنید.

در Python می‌توانید فایل را با ابزار داخلی بررسی کنید:

python -m json.tool request.json

اگر فایل معتبر باشد، نسخه فرمت‌شده چاپ می‌شود. اگر نامعتبر باشد، محل تقریبی خطا نمایش داده خواهد شد.

برای فرمت‌کردن و ذخیره خروجی:

python -m json.tool \
  request.json \
  request-formatted.json

نکات طراحی JSON برای API

نام کلیدها را ثابت نگه دارید

اگر API یک‌بار user_id و بار دیگر userId برگرداند، Client پیچیده می‌شود.

یکی از الگوها را انتخاب و ثابت استفاده کنید.

نوع فیلد را تغییر ندهید

نامناسب:

{
  "count": 10
}

و در پاسخ دیگر:

{
  "count": "10"
}

Client نباید مجبور باشد چند نوع متفاوت را برای یک فیلد حدس بزند.

نبود داده را روشن تعریف کنید

مشخص کنید هنگام نبود مقدار:

  • Property حذف می‌شود؟
  • مقدار null برمی‌گردد؟
  • String خالی استفاده می‌شود؟
  • Array خالی برمی‌گردد؟

به‌صورت تصادفی از همه این حالت‌ها استفاده نکنید.

Date را استاندارد ارسال کنید

نمونه مناسب:

{
  "created_at": "2026-08-06T10:30:00Z"
}

Timezone را مشخص کنید و فقط تاریخ محلی مبهم نفرستید.

واحد عدد را مشخص کنید

نامبهم:

{
  "price": 500
}

روشن‌تر:

{
  "amount": 500000,
  "currency": "IRR"
}

برای اندازه فایل:

{
  "size_bytes": 1048576
}

Error Response یکپارچه طراحی کنید

نمونه:

{
  "error": {
    "code": "INVALID_INPUT",
    "message": "The request is invalid.",
    "details": [
      {
        "field": "email",
        "reason": "Invalid format"
      }
    ]
  }
}

Client باید بتواند خطا را بدون Parse متن آزاد پردازش کند.

داده اضافی را بی‌دلیل ارسال نکنید

Payload بزرگ‌تر باعث افزایش زمان انتقال، مصرف حافظه و در APIهای مدل زبانی افزایش توکن ورودی می‌شود.

فقط داده موردنیاز همان عملیات را ارسال کنید.

چک‌لیست JSON مناسب برای API

پیش از ارسال یا انتشار بررسی کنید:

  • JSON با Parser واقعی قابل Parse است.
  • Keyها داخل Double Quote هستند.
  • کامای اضافه وجود ندارد.
  • Comment وجود ندارد.
  • نوع فیلدها ثابت است.
  • فیلدهای Required مشخص‌اند.
  • رفتار null تعریف شده است.
  • تاریخ دارای فرمت و Timezone مشخص است.
  • مبلغ دارای واحد است.
  • اطلاعات اضافی حذف شده‌اند.
  • داده ورودی Validation می‌شود.
  • پاسخ API فقط براساس Status Code تفسیر نمی‌شود.
  • Content-Type بررسی می‌شود.
  • خطاهای Parse مدیریت می‌شوند.
  • API Key داخل JSON منتشرشده قرار ندارد.
  • خروجی مدل پیش از استفاده Validate می‌شود.
  • Schema با نسخه API هماهنگ است.

پرسش‌های متداول

JSON مخفف چیست؟

JSON مخفف JavaScript Object Notation است.

آیا JSON یک زبان برنامه‌نویسی است؟

خیر. JSON یک فرمت متنی برای نمایش و تبادل داده است و قابلیت‌هایی مانند تابع، شرط، حلقه یا اجرای کد ندارد.

پسوند فایل JSON چیست؟

پسوند رایج آن .json است:

config.json
data.json
response.json

MIME Type فایل JSON چیست؟

مقدار رایج و استاندارد:

application/json

تفاوت JSON و XML چیست؟

JSON معمولاً کوتاه‌تر و برای برنامه‌های Web و JavaScript ساده‌تر است. XML قابلیت‌هایی مانند Attribute، Namespace و Schemaهای خاص خود را دارد. انتخاب به نوع سیستم و قرارداد موجود بستگی دارد.

آیا می‌توان در JSON کامنت نوشت؟

در JSON استاندارد خیر. بعضی ابزارها فرمت‌هایی مانند JSONC ارائه می‌دهند، اما JSONC را نباید بدون هماهنگی به Parser استاندارد JSON ارسال کنید.

آیا ترتیب Keyها در JSON مهم است؟

برنامه نباید معنای Object را به ترتیب Keyها وابسته کند. Array ترتیب‌دار است، اما Propertyهای Object باید با نام آن‌ها پردازش شوند.

آیا JSON از متن فارسی پشتیبانی می‌کند؟

بله. Stringهای JSON از Unicode پشتیبانی می‌کنند. فایل‌ها و ارتباطات خود را با UTF-8 مدیریت کنید.

تفاوت json.load و json.loads چیست؟

json.load از فایل می‌خواند و json.loads از String.

تفاوت json.dump و json.dumps چیست؟

json.dump در فایل می‌نویسد و json.dumps یک String برمی‌گرداند.

تفاوت JSON و JSON Schema چیست؟

JSON خود داده است. JSON Schema قرارداد و محدودیت‌های ساختار آن داده را توصیف می‌کند.

آیا پاسخ JSON مدل هوش مصنوعی همیشه معتبر است؟

خیر. درخواست متنی ساده تضمین نمی‌کند مدل همیشه JSON معتبر و مطابق Schema تولید کند. در صورت پشتیبانی مدل از JSON Mode یا Structured Outputs استفاده و خروجی را سمت برنامه Validate کنید.

آیا می‌توان API Key را داخل JSON درخواست قرار داد؟

روش معمول ارسال API Key استفاده از Header احراز هویت است:

Authorization: Bearer YOUR_DARVAREH_API_KEY

قرار‌دادن کلید داخل بدنه بدون نیاز، احتمال ثبت یا انتشار ناخواسته آن را افزایش می‌دهد.

Base URL درواره چیست؟

https://api.darvareh.ir/v1

قیمت استفاده از مدل‌ها چگونه محاسبه می‌شود؟

قیمت به مدل و نوع ورودی و خروجی وابسته است و ممکن است تغییر کند. برای اطلاعات به‌روز، صفحه مدل‌ها و قیمت‌های درواره را بررسی کنید.

جمع‌بندی

JSON یک فرمت متنی سبک، مستقل از زبان و بسیار پرکاربرد برای تبادل داده‌های ساختاریافته است. Object و Array دو ساختار اصلی آن هستند و مقدارها می‌توانند String، Number، Boolean، null، Object یا Array باشند.

برای کار مطمئن با JSON باید چند اصل را رعایت کنید:

  1. JSON را با Object زبان برنامه‌نویسی اشتباه نگیرید.
  2. Key و String را با Double Quote بنویسید.
  3. از Trailing Comma، Comment و undefined استفاده نکنید.
  4. داده را با Parser استاندارد Parse کنید.
  5. بعد از Parse، ساختار و قواعد کسب‌وکار را Validate کنید.
  6. Date، مبلغ و عددهای بزرگ را با قرارداد روشن منتقل کنید.
  7. در Python از json.load، json.loads، json.dump و json.dumps درست استفاده کنید.
  8. در JavaScript از JSON.parse و JSON.stringify استفاده کنید.
  9. برای HTTP Header مناسب Content-Type را تنظیم کنید.
  10. پاسخ API و مدل هوش مصنوعی را قبل از استفاده بررسی کنید.

JSON دروازه ورود به بسیاری از مفاهیم مهم‌تر مانند REST API، Webhook، JSON Schema، Structured Outputs، Function Calling و توسعه اپلیکیشن‌های هوش مصنوعی است.

برای آزمایش JSON در یک API واقعی می‌توانید در درواره ثبت‌نام کرده، API Key بسازید و با Base URL یکپارچه درواره به مدل‌های مختلف هوش مصنوعی متصل شوید. Model IDها و قیمت به‌روز آن‌ها در صفحه مدل‌های درواره قرار دارد.

منابع رسمی

مقالات مرتبط

برای مطالعه شرایط استفاده و محدودیت‌های مسئولیت، صفحه «سلب مسئولیت» را مشاهده کنید.

Read more

اتوماسیون هوش مصنوعی چیست؟ کاربردها و آموزش ساخت AI Automation

اتوماسیون هوش مصنوعی چیست؟ کاربردها و آموزش ساخت AI Automation

اتوماسیون هوش مصنوعی با ترکیب گردش‌کارهای خودکار و مدل‌های هوش مصنوعی، پردازش متن، دسته‌بندی، استخراج اطلاعات و تصمیم‌های پیشنهادی را خودکار می‌کند. در این راهنما، معماری و ساخت نمونه عملی آن با API درواره را می‌آموزید.

Agentic Commerce چیست؟ آینده خرید با ایجنت هوش مصنوعی

Agentic Commerce چیست؟ آینده خرید با ایجنت هوش مصنوعی

Agentic Commerce شیوه‌ای جدید برای خرید اینترنتی است که در آن ایجنت هوش مصنوعی می‌تواند نیاز کاربر را بفهمد، محصولات را جست‌وجو و مقایسه کند و فرایند خرید را پیش ببرد. در این راهنما با معماری، UCP، ACP و پیاده‌سازی آن با API درواره آشنا می‌شوید.