تبدیل JSON به CSV دادههای ساختاریافته را از فرمت JSON به مقادیر جداشده با کاما (CSV) تبدیل میکند؛ یعنی به فرمتی جدولی که صفحهگستردهها، پایگاههای داده و ابزارهای تحلیل داده مستقیماً میخوانند. JSON داده را بهصورت اشیاء و آرایههای تودرتو بدون schema ثابت ذخیره میکند. CSV داده را بهصورت سطر و ستون با یک سطر سرصفحه برای نام فیلدها ذخیره میکند. این تبدیل، پل ارتباطی بین دادههای API و صفحهگستردهها و پایگاههای داده است.
CSV (مقادیر جداشده با کاما) در RFC 4180 تعریف شده است. هر خط یک رکورد است و فیلدهای هر خط با یک کاراکتر جداکننده — معمولاً کاما — از هم جدا میشوند. فیلدهایی که شامل جداکننده، گیومه دوتایی یا سطر جدید هستند باید در گیومه دوتایی محصور شوند و گیومههای داخلی با دوبرابر کردن آنها escape میشوند. این escape کردن اصلیترین منشأ باگ هنگام نوشتن دستی یک مبدل JSON به CSV است.
این تبدیل وقتی ورودی شما یک آرایه تخت از اشیاء با کلیدهای یکسان باشد ساده است. هر شیء یک سطر میشود و هر کلید منحصربهفرد یک سرصفحه ستون. اشیاء تودرتو و آرایهها نیاز به یک مرحله تسطیح دارند، و کلیدهای متفاوت در بین اشیاء نیاز به استراتژی برای مدیریت فیلدهای غایب دارند — معمولاً سلول را خالی میگذارند. یک مبدل قابلاعتماد همه این موارد لبهای را بهطور خودکار مدیریت میکند.
چرا JSON را به CSV تبدیل کنیم؟
APIها JSON برمیگردانند، اما صفحهگستردهها، پایگاههای داده SQL و ابزارهای BI داده جدولی میخواهند. تبدیل JSON به CSV به شما امکان میدهد داده را بین این سیستمها بدون نوشتن اسکریپت import سفارشی جابجا کنید.
⚡
تبدیل فوری در مرورگر
JSON خود را بچسبانید و فایل را فوری دانلود کنید. بدون آپلود به سرور، بدون محدودیت اندازه فایل از APIهای خارجی، بدون انتظار برای صف پردازش.
🔒
پردازش با حفظ حریم خصوصی
دادههای شما در مرورگر شما باقی میمانند. تبدیل کاملاً با JavaScript روی دستگاه شما اجرا میشود. صادرات پایگاه داده، اطلاعات کاربران و دادههای مالی هرگز از دستگاه شما خارج نمیشوند.
🔀
پشتیبانی از جداکنندههای متعدد
بین جداکنندههای کاما، سمیکالن، تب یا پایپ انتخاب کنید. برای صفحهگستردههای با locale اروپایی از سمیکالن، برای فایلهای TSV از تب، یا برای import سیستمهای قدیمی از پایپ استفاده کنید.
📋
بدون حساب کاربری
صفحه را باز کنید و تبدیل را انجام دهید. بدون ثبتنام، بدون کلید API، بدون نصب CLI. روی هر دستگاهی با مرورگر مدرن کار میکند.
موارد استفاده تبدیل JSON به CSV
صادرات داده API برای صفحهگسترده
REST APIها JSON برمیگردانند. مدیران محصول و تحلیلگران به این داده در Excel یا Google Sheets نیاز دارند. پاسخ API را به CSV تبدیل کنید و مستقیماً در هر برنامه صفحهگسترده باز کنید.
وارد کردن انبوه داده به پایگاه داده
دستورات PostgreSQL COPY، MySQL LOAD DATA و SQLite .import همه CSV قبول میکنند. مجموعه داده خود را به فرمت جدولی تبدیل کنید تا بدون نوشتن اسکریپت import سفارشی، بارگذاری انبوه سریعی داشته باشید.
نمونهسازی ETL Pipeline
ETL pipelineها اغلب خروجیهای میانی دارند که بررسی آنها بهصورت JSON خام سخت است. خروجی یک مرحله را به CSV تبدیل کنید و در صفحهگسترده باز کنید تا قبل از اتصال کامل pipeline، تبدیلها را تأیید کنید.
آمادهسازی دادههای آزمون QA
مهندسان QA دادههای fixture آزمون را بهصورت JSON تولید میکنند، اما بسیاری از چارچوبهای آزمون و ابزارهای data-driven testing برای ورودیهای آزمون پارامتری CSV قبول میکنند. fixtureها را بدون بازقالببندی دستی به CSV تبدیل کنید.
تحلیل لاگ و گزارشدهی
لاگهای JSON ساختاریافته از برنامهها و سرویسهای ابری را میتوان به CSV تبدیل کرد تا در ابزارهای BI مانند Tableau، Power BI یا Looker برای تجسم و گزارشدهی import شوند.
پردازش داده علمی
دانشجویان و پژوهشگرانی که با APIهای داده باز کار میکنند پاسخهای JSON دریافت میکنند. تبدیل به CSV، تحلیل در R، pandas، SPSS یا Excel را بدون نوشتن کد تجزیه ممکن میسازد.
راهنمای جداکنندههای CSV
کاراکتر جداکننده فیلدها را در هر سطر از هم جدا میکند. کاما رایجترین است، اما جداکنندههای دیگر در زمینههای خاص استاندارد هستند. انتخاب جداکننده اشتباه باعث ادغام یا تقسیم نادرست فیلدها هنگام باز کردن فایل میشود.
جداکننده
کاراکتر
پسوند
زمان استفاده
Comma
,
.csv
Default for most spreadsheets and databases
Semicolon
;
.csv
Standard in locales where comma is a decimal separator (DE, FR, BR)
Tab
\t
.tsv
Avoids escaping when field values contain commas or semicolons
Pipe
|
.csv
Used in fixed-width legacy systems and some ETL pipelines
مدیریت JSON تودرتو در CSV
CSV یک فرمت تخت است و هیچ روش بومی برای نمایش اشیاء یا آرایههای تودرتو ندارد. وقتی JSON شما شامل ساختارهای تودرتو است، مبدل باید آنها را به ستونها تسطیح کند. روشهای مختلفی وجود دارد و انتخاب درست بستگی به نحوه مصرف CSV دارد.
تسطیح با نقطهگذاری (Dot-Notation)
کلیدهای تودرتو با نقطه به هم متصل میشوند: {"address": {"city": "تهران"}} به یک ستون با نام address.city و مقدار تهران تبدیل میشود. این رایجترین رویکرد است و با ابزارهایی که از ارجاع فیلدهای تودرتو پشتیبانی میکنند بهخوبی کار میکند.
ستونهای ایندکس آرایه
آرایهها به ستونهای شمارهگذاریشده گسترش مییابند: {"tags": ["a", "b"]} به tags.0 = a و tags.1 = b تبدیل میشود. این همه مقادیر را حفظ میکند اما وقتی آرایهها بزرگ هستند ستونهای زیادی ایجاد میکند.
بازگشت به رشته JSON
مقادیر تودرتوی پیچیده بهصورت رشته JSON در سلول CSV سریال میشوند: سلول شامل متن خام JSON است. این ساختار کامل را حفظ میکند اما مصرفکننده باید مقدار سلول را تجزیه کند.
نادیده گرفتن فیلدهای تودرتو
برخی مبدلها اشیاء و آرایههای تودرتو را کاملاً حذف میکنند و فقط فیلدهای اسکالر (رشته، عدد، بولین، null) را نگه میدارند. این CSV تمیزی تولید میکند اما داده از دست میرود. فقط وقتی مطمئن هستید فیلدهای تودرتو نیاز نیستند مفید است.
نمونههای کد
تبدیل برنامهای JSON به CSV نیاز به مدیریت استخراج سرصفحه، نقلقولگذاری فیلدها و escape کردن جداکننده دارد. اکثر زبانها پشتیبانی داخلی یا کتابخانه استاندارد برای نوشتن CSV دارند.
# Using jq to convert JSON array to CSV
echo '[{"name":"Alice","age":30},{"name":"Bob","age":25}]' | \
jq -r '(.[0] | keys_unsorted) as $k | $k, (.[] | [.[$k[]]] ) | @csv'
# → "name","age"
# → "Alice",30
# → "Bob",25
# Using Miller (mlr) for streaming conversion
echo '[{"name":"Alice","age":30}]' | mlr --json --ocsv cat
# → name,age
# → Alice,30
Go
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"os"
)
func main() {
jsonStr := `[{"name":"Alice","age":30},{"name":"Bob","age":25}]`
var data []map[string]interface{}
json.Unmarshal([]byte(jsonStr), &data)
w := csv.NewWriter(os.Stdout)
// Write header
headers := []string{"name", "age"}
w.Write(headers)
// Write rows
for _, row := range data {
record := make([]string, len(headers))
for i, h := range headers {
record[i] = fmt.Sprintf("%v", row[h])
}
w.Write(record)
}
w.Flush()
// → name,age
// → Alice,30
// → Bob,25
}
سوالات متداول
این مبدل چه ساختار JSONای انتظار دارد؟
این مبدل یک آرایه JSON از اشیاء میپذیرد، مانند [{"name":"علی"},{"name":"مریم"}]'. هر شیء در آرایه یک سطر در خروجی میشود و کلیدهای شیء سرصفحههای ستون میشوند. یک شیء JSON منفرد (که در آرایهای قرار نگرفته) بهعنوان جدول یکسطری در نظر گرفته میشود.
اشیاء و آرایههای تودرتو چطور مدیریت میشوند؟
مقادیر تودرتو با نقطهگذاری تسطیح میشوند. برای مثال، {"address":{"city":"تهران"}'} یک ستون با نام address.city تولید میکند. آرایهها به ستونهای ایندکسدار گسترش مییابند (tags.0، tags.1). این داده را حفظ میکند و خروجی را تخت نگه میدارد.
اگر اشیاء کلیدهای متفاوتی داشته باشند چه اتفاقی میافتد؟
مبدل همه کلیدهای منحصربهفرد را در تمام اشیاء آرایه جمعآوری میکند و از آنها بهعنوان سرصفحههای ستون استفاده میکند. اشیایی که فاقد یک کلید هستند برای آن ستون سلول خالی میگیرند. هیچ دادهای از دست نمیرود و ترتیب ستونها از ترتیب اول ظهور کلیدها پیروی میکند.
آیا میتوانم به جای کاما از سمیکالن یا تب استفاده کنم؟
بله. ابزار از جداکنندههای کاما، سمیکالن، تب و پایپ پشتیبانی میکند. وقتی داده یا locale شما از کاما بهعنوان جداکننده اعشار استفاده میکند از سمیکالن استفاده کنید (رایج در صفحهگستردههای آلمانی، فرانسوی و برزیلی). برای فایلهای TSV که توسط ابزارهای Unix مصرف میشوند از تب استفاده کنید.
آیا تبدیل بدون اتلاف است؟
برای آرایههای JSON تخت با مقادیر اسکالر یکسان، بله. فایل خروجی همان داده را دارد و میتواند به JSON یکسان بازگردانده شود. برای ساختارهای تودرتو، تسطیح شکل داده را تغییر میدهد. مقادیر آرایه سریالشده به ستونهای ایندکسدار یا رشتههای JSON قابل بازسازی هستند، اما round-trip نیاز به دانستن ساختار اصلی دارد.
چه اندازه فایل JSON میتوانم تبدیل کنم؟
ابزار در مرورگر شما اجرا میشود و داده را در حافظه پردازش میکند — فایلهای تا ۱۰ تا ۲۰ مگابایت روی دستگاههای مدرن بدون مشکل تبدیل میشوند. برای فایلهای بزرگتر، از یک ابزار CLI مانند jq، Miller، یا یک اسکریپت Python با ماژول csv استفاده کنید که داده را بهصورت جریانی پردازش میکنند.
آیا چسباندن داده حساس در این ابزار امن است؟
بله. تمام پردازش در مرورگر شما با استفاده از JavaScript انجام میشود. هیچ دادهای به هیچ سروری ارسال نمیشود. میتوانید این را با باز کردن developer tools مرورگر و بررسی تب Network در حین تبدیل تأیید کنید.