CSV to JSON JavaScript — Converter + Code Examples

·Front-end & Node.js Developer·समीक्षकSophie Laurent·प्रकाशित

मुफ़्त CSV to JSON को सीधे अपने ब्राउज़र में उपयोग करें — इंस्टॉलेशन की ज़रूरत नहीं।

CSV to JSON ऑनलाइन आज़माएं →

अधिकांश CSV डेटा फ़ाइल अपलोड, डेटाबेस निर्यात, या ऐसे API से फ्लैट स्ट्रिंग के रूप में आता है जो अभी भी 1970 के दशक के प्रारूप में काम करता है। JavaScript में CSV को JSON में बदलने के लिए आपको दो चीजें चाहिए जो भाषा मुफ्त में देती है: पंक्तियाँ पार्स करने के लिए स्ट्रिंग विभाजन और JSON.stringify() परिणाम को क्रमबद्ध करने के लिए। बुनियादी कार्यों के लिए कोई npm पैकेज आवश्यक नहीं — यह गाइड पुनः उपयोगी csvToJson() उपयोगिता से लेकर PapaParse और Node.js फ़ाइल I/O तक पूरी प्रक्रिया को कवर करती है। बिना कोड लिखे त्वरित रूपांतरण के लिए, ऑनलाइन CSV to JSON कन्वर्टर इसे तुरंत संभालता है। सभी उदाहरण Node.js 18+ और आधुनिक ब्राउज़रों के लिए हैं।

  • CSV को नई पंक्ति से विभाजित करें, पंक्ति 0 से हेडर निकालें, शेष पंक्तियों को ऑब्जेक्ट में मैप करें, फिर सुव्यवस्थित आउटपुट के लिए JSON.stringify(array, null, 2) का उपयोग करें।
  • JSON.stringify() एक स्ट्रिंग उत्पन्न करता है; JSON.parse() इसे वापस सक्रिय JavaScript ऐरे में बदलता है — संचालन से पहले जानें कि आपके पास कौन सा है।
  • Map instances JSON में automatically serialize नहीं होते — पहले Object.fromEntries(map) call करें।
  • उद्धृत फ़ील्ड, मानों के भीतर अल्पविराम, या कक्षों में नई पंक्तियों वाले CSV के लिए, manual विभाजन की बजाय PapaParse या csv-parse का उपयोग करें।
  • csvtojson (npm) single call में type conversion, streaming, और RFC 4180 के edge cases संभालता है।

CSV से JSON रूपांतरण क्या है?

CSV से JSON रूपांतरण एक सपाट, अल्पविराम-सीमांकित पाठ प्रारूप को ऑब्जेक्ट की संरचित ऐरे में परिवर्तित करता है जहाँ प्रत्येक पंक्ति स्तंभ हेडर द्वारा कुंजीबद्ध एक JavaScript ऑब्जेक्ट बनती है। CSV प्रारूप में कोई डेटा प्रकार नहीं होते — सब कुछ स्ट्रिंग है। JSON संरचना, नेस्टिंग, और स्पष्ट प्रकार (संख्याएँ, बूलियन, null) जोड़ता है। यह रूपांतरण लगभग हर उस डेटा प्रक्रिया का पहला चरण है जो स्प्रेडशीट निर्यात, पुरानी प्रणाली के डंप, या उपयोगकर्ता-अपलोड की गई फ़ाइल से शुरू होती है। अंतर्निहित डेटा समान रहता है; प्रारूप स्थिति-आधारित स्तंभों से नामित प्रॉपर्टी में बदल जाता है।

Before · json
After · json
name,email,role,active
अर्जुन शर्मा,arjun@nexuslabs.io,Engineering Lead,true
प्रिया पटेल,priya@nexuslabs.io,Product Manager,true
[
  {
    "name": "अर्जुन शर्मा",
    "email": "arjun@nexuslabs.io",
    "role": "Engineering Lead",
    "active": "true"
  },
  {
    "name": "प्रिया पटेल",
    "email": "priya@nexuslabs.io",
    "role": "Product Manager",
    "active": "true"
  }
]

csvToJson() — एक पुनः उपयोगी रूपांतरण फ़ंक्शन बनाना

JavaScript में पूर्ण CSV-to-JSON प्रक्रिया तीन चरणों में विभाजित होती है: CSV स्ट्रिंग को पंक्तियाँ प्राप्त करने के लिए नई पंक्ति से विभाजित करें, पहली पंक्ति से split(',') से हेडर निकालें, फिर शेष प्रत्येक पंक्ति को एक सादे JavaScript ऑब्जेक्ट में मैप करें जहाँ keys हेडर से आती हैं और values संबंधित column positions से। आखिर में JSON.stringify() उस ऑब्जेक्ट ऐरे को JSON स्ट्रिंग में बदलता है। यहाँ एक न्यूनतम कार्यशील संस्करण है:

JavaScript — minimal csvToJson
function csvToJson(csv) {
  const lines = csv.trim().split('\n')
  const headers = lines[0].split(',').map(h => h.trim())

  const rows = lines.slice(1)
    .filter(line => line.trim() !== '')
    .map(line => {
      const values = line.split(',')
      return Object.fromEntries(
        headers.map((header, i) => [header, values[i]?.trim()])
      )
    })

  return JSON.stringify(rows, null, 2)
}

const csv = `server,port,region,status
api-gateway,8080,us-east-1,healthy
auth-service,8443,eu-west-1,degraded
payments-api,9090,ap-south-1,healthy`

console.log(csvToJson(csv))
// [
//   { "server": "api-gateway", "port": "8080", "region": "us-east-1", "status": "healthy" },
//   { "server": "auth-service", "port": "8443", "region": "eu-west-1", "status": "degraded" },
//   { "server": "payments-api", "port": "9090", "region": "ap-south-1", "status": "healthy" }
// ]

वह फ़ंक्शन बुनियादी बातें संभालता है: अनुगामी नई पंक्तियाँ, खाली पंक्तियाँ, मानों के आसपास रिक्त स्थान। प्रत्येक CSV फ़ील्ड स्ट्रिंग के रूप में आता है। ध्यान दें कि port का मान "8080" (स्ट्रिंग) है, न कि 8080 (संख्या)। यदि आपको JSON आउटपुट में उचित प्रकार चाहिए, तो आपको उन्हें स्वयं रूपांतरित करना होगा। प्रकार पहचान के साथ एक विस्तारित संस्करण यहाँ है:

JavaScript — csvToJson with type coercion
function coerceValue(val) {
  if (val === undefined || val === '') return null
  if (val === 'true') return true
  if (val === 'false') return false
  if (val === 'null') return null
  const num = Number(val)
  if (!isNaN(num) && val.trim() !== '') return num
  return val
}

function csvToJson(csv, { coerce = false } = {}) {
  const lines = csv.trim().split('\n')
  const headers = lines[0].split(',').map(h => h.trim())

  const rows = lines.slice(1)
    .filter(line => line.trim() !== '')
    .map(line => {
      const values = line.split(',')
      return Object.fromEntries(
        headers.map((header, i) => [
          header,
          coerce ? coerceValue(values[i]?.trim()) : values[i]?.trim()
        ])
      )
    })

  return JSON.stringify(rows, null, 2)
}

const csv = `endpoint,port,max_connections,debug
/api/v2/orders,8443,500,true
/api/v2/health,8080,100,false`

console.log(csvToJson(csv, { coerce: true }))
// [
//   { "endpoint": "/api/v2/orders", "port": 8443, "max_connections": 500, "debug": true },
//   { "endpoint": "/api/v2/health", "port": 8080, "max_connections": 100, "debug": false }
// ]

coerce फ़्लैग वैकल्पिक है क्योंकि स्वचालित प्रकार पहचान विफल हो सकती है — पिन कोड जैसे ("400017") को संख्या में बदलने पर अग्रणी शून्य खो जाते हैं। रूपांतरण को डिफ़ॉल्ट रूप से बंद रखें और केवल तभी सक्षम करें जब आप स्कीमा नियंत्रित करते हों। संक्षिप्त नोट: JSON.stringify() इंडेंटेशन के लिए तीसरा space तर्क स्वीकार करता है। दो स्थानों के लिए 2, चार के लिए 4, या टैब के लिए "\t" पास करें। संक्षिप्त एकल-पंक्ति आउटपुट के लिए इसे पूरी तरह छोड़ दें — उपयोगी है जब JSON स्ट्रिंग को API अनुरोध बॉडी के रूप में भेजा जाए जहाँ रिक्त स्थान केवल बैंडविड्थ बर्बाद करता है।

नोट:कच्ची CSV स्ट्रिंग JSON नहीं है। CSV पाठ पर सीधे JSON.parse() call करने पर SyntaxError उत्पन्न होती है क्योंकि अल्पविराम और नई पंक्तियाँ वैध JSON वाक्यविन्यास नहीं हैं। आपको पहले अपने csvToJson() फ़ंक्शन से CSV को JavaScript ऑब्जेक्ट में बदलना होगा, जो आंतरिक रूप से वास्तविक JSON स्ट्रिंग उत्पन्न करने के लिए JSON.stringify() को internally call करता है।

CSV डेटा से Map, Date, और कस्टम ऑब्जेक्ट संभालना

हर CSV रूपांतरण सादे ऑब्जेक्ट की फ्लैट ऐरे के साथ समाप्त नहीं होता। कभी-कभी आपको header-value युग्मों से Map बनाना होता है, दिनांक स्ट्रिंग को Date ऑब्जेक्ट में पार्स करना होता है, या क्रमबद्धता से पहले गणित किए गए प्रॉपर्टी संलग्न करने होते हैं। JavaScript में एक विशेषता है जो लोगों को भ्रमित करती है: JSON.stringify() के साथ Map इंस्टेंस क्रमबद्ध नहीं होते। आपको एक खाली ऑब्जेक्ट मिलता है। समाधान है Object.fromEntries() को क्रमबद्ध करने से पहले Map को सादे ऑब्जेक्ट में वापस बदलने के लिए।

Map के {} में क्रमबद्ध होने का कारण यह है कि JSON.stringify() किसी ऑब्जेक्ट की अपनी गणना योग्य प्रॉपर्टी पर पुनरावृत्ति करता है। Map अपनी प्रविष्टियाँ एक आंतरिक स्लॉट में संग्रहीत करता है, न कि ऑब्जेक्ट पर गणना योग्य प्रॉपर्टी के रूप में, इसलिए क्रमबद्धकर्ता बिना कुंजियों वाले ऑब्जेक्ट देखता है। Map प्रोटोटाइप में toJSON() मेथड का भी अभाव है, जो वह हुक है जिसे JSON.stringify() किसी भी value को serialize करने से पहले पहले call करता है। यदि किसी मान में toJSON() है, तो मेथड का रिटर्न मान क्रमबद्ध होता है — न कि ऑब्जेक्ट स्वयं। इसीलिए Date ऑब्जेक्ट सही ढंग से क्रमबद्ध होते हैं: Date.prototype.toJSON एक ISO 8601 स्ट्रिंग लौटाता है, इसलिए JSON.stringify(new Date()) एक खाली ऑब्जेक्ट की बजाय एक उद्धृत टाइमस्टैंप उत्पन्न करता है। इस हुक को समझना आपको अपनी कक्षाओं पर भी यही व्यवहार परिभाषित करने देता है — जैसा नीचे EmployeeRecord उदाहरण में दिखाया गया है — ठीक वही नियंत्रित करने के लिए कि अंतिम JSON आउटपुट में कौन से CSV-प्राप्त फ़ील्ड दिखाई दें।

Map को JSON में बदलना

JavaScript — Map to JSON via Object.fromEntries()
// CSV header→value युग्मों से Map बनाएँ
const headers = ['server', 'port', 'region']
const values = ['payments-api', '9090', 'ap-south-1']
const rowMap = new Map(headers.map((h, i) => [h, values[i]]))

// Map सीधे क्रमबद्ध नहीं होता
console.log(JSON.stringify(rowMap))
// "{}"  — खाली ऑब्जेक्ट, डेटा नष्ट!

// पहले सादे ऑब्जेक्ट में बदलें
const rowObj = Object.fromEntries(rowMap)
console.log(JSON.stringify(rowObj, null, 2))
// {
//   "server": "payments-api",
//   "port": "9090",
//   "region": "ap-south-1"
// }

Date स्ट्रिंग और toJSON()

CSV दिनांक फ़ील्ड स्ट्रिंग के रूप में आते हैं। यदि आप उन्हें प्रसंस्करण के दौरान Date ऑब्जेक्ट में पार्स करते हैं, तो वे Date सही ढंग से क्रमबद्ध होते हैं क्योंकि Date में एक अंतर्निर्मित toJSON() मेथड है जो ISO 8601 स्ट्रिंग लौटाती है। आप अपनी कक्षाओं पर कस्टम toJSON() भी परिभाषित कर सकते हैं यह नियंत्रित करने के लिए कि कौन से CSV स्तंभ क्रमबद्ध आउटपुट में दिखाई दें — उदाहरण के लिए, _rowIndex जैसे आंतरिक ट्रैकिंग फ़ील्ड को हटाना।

JavaScript — toJSON() for custom serialization
class EmployeeRecord {
  constructor(csvRow) {
    this._rowIndex = csvRow._rowIndex  // आंतरिक, JSON के लिए नहीं
    this.employeeId = csvRow.employee_id
    this.name = csvRow.name
    this.hiredAt = new Date(csvRow.hired_date)
    this.salary = Number(csvRow.salary)
  }

  toJSON() {
    // केवल वे फ़ील्ड प्रकट करें जो JSON आउटपुट में चाहिए
    return {
      employee_id: this.employeeId,
      name: this.name,
      hired_at: this.hiredAt,  // Date.toJSON() → ISO स्ट्रिंग स्वचालित रूप से
      salary: this.salary,
    }
  }
}

const csvRow = {
  _rowIndex: 42,
  employee_id: 'EMP-2847',
  name: 'अर्जुन शर्मा',
  hired_date: '2024-03-15',
  salary: '128000',
}

const record = new EmployeeRecord(csvRow)
console.log(JSON.stringify(record, null, 2))
// {
//   "employee_id": "EMP-2847",
//   "name": "अर्जुन शर्मा",
//   "hired_at": "2024-03-15T00:00:00.000Z",
//   "salary": 128000
// }
// नोट: _rowIndex बाहर है, salary एक संख्या है, दिनांक ISO प्रारूप में है

Date डीसीरियलाइज़ेशन के लिए Reviver

CSV-प्राप्त JSON को फ़ाइल में लिखने या नेटवर्क पर भेजने के बाद, JSON.parse() आपको सादे ऑब्जेक्ट वापस देता है — Date ऑब्जेक्ट फिर से स्ट्रिंग बन जाते हैं। पार्सिंग के दौरान ISO 8601 स्ट्रिंग को वापस Date ऑब्जेक्ट में बदलने के लिए reviver फ़ंक्शन का उपयोग करें:

JavaScript — reviver to reconstruct Date objects
const jsonString = '{"employee_id":"EMP-2847","name":"अर्जुन शर्मा","hired_at":"2024-03-15T00:00:00.000Z","salary":128000}'

const isoDatePattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/

const parsed = JSON.parse(jsonString, (key, value) => {
  if (typeof value === 'string' && isoDatePattern.test(value)) {
    return new Date(value)
  }
  return value
})

console.log(parsed.hired_at instanceof Date)  // true
console.log(parsed.hired_at.getFullYear())    // 2024
चेतावनी:JSON.stringify() फ़ंक्शन, Symbol, या undefined प्रॉपर्टी वाले मानों के लिए undefined (स्ट्रिंग नहीं) लौटाता है। यदि आपके CSV-प्राप्त ऑब्जेक्ट किसी अनुपस्थित स्तंभ से गलती से undefined मान प्राप्त करते हैं, तो वह प्रॉपर्टी JSON आउटपुट से चुपचाप गायब हो जाती है। अनुपस्थित मानों को हमेशा null में डिफ़ॉल्ट करें।

JSON.stringify() पैरामीटर संदर्भ

फ़ंक्शन हस्ताक्षर है JSON.stringify(value, replacer?, space?) replacer और space तर्क दोनों वैकल्पिक हैं — जब आपको केवल इंडेंटेशन चाहिए तो replacer के लिए null पास करें।

पैरामीटर
प्रकार
डिफ़ॉल्ट
विवरण
value
any
(आवश्यक)
क्रमबद्ध किया जाने वाला JavaScript मान — ऑब्जेक्ट, ऐरे, स्ट्रिंग, संख्या, बूलियन, या null
replacer
Function | Array | null
undefined
Serialization के दौरान values को filter या transform करें। Array property names को whitelist करता है; function (key, value) pair receive करता है
space
number | string
undefined
इंडेंटेशन: स्थानों के लिए 0–10 संख्या, कस्टम इंडेंट के लिए स्ट्रिंग (जैसे "\t")। संक्षिप्त एकल-पंक्ति आउटपुट के लिए छोड़ दें

JSON.parse() पैरामीटर:

पैरामीटर
प्रकार
डिफ़ॉल्ट
विवरण
text
string
(आवश्यक)
पार्स की जाने वाली JSON स्ट्रिंग — वैध JSON होनी चाहिए अन्यथा SyntaxError उत्पन्न होती है
reviver
Function | undefined
undefined
प्रत्येक key-value युग्म के लिए call किया जाता है। रिटर्न मान मूल को replace करता है; undefined रिटर्न करने पर वह property हट जाती है

JSON.parse() — JSON आउटपुट का उपभोग

एक बार जब आपके पास csvToJson() से JSON स्ट्रिंग हो, तो अगला चरण आमतौर पर उसे फ़िल्टरिंग, मैपिंग, या API में प्रेषित करने के लिए सक्रिय JavaScript ऐरे में वापस पार्स करना है। JSON स्ट्रिंग (typeof === "string") और JavaScript ऑब्जेक्ट के बीच का अंतर महत्वपूर्ण है। आप किसी स्ट्रिंग पर .filter() नहीं call कर सकते या [0].name तक नहीं पहुँच सकते — आपको पहले JSON.parse() चाहिए। यह राउंड-ट्रिप (stringify फिर parse) सत्यापन तकनीक के रूप में भी काम करती है: यदि आपके CSV रूपांतरण ने कुछ ऐसा उत्पन्न किया जो वैध JSON नहीं है, तो parse अपवाद फेंकेगा। वैकल्पिक reviver तर्क आपको पार्सिंग के दौरान प्रत्येक key-value युग्म को रूपांतरित करने देता है — ISO स्ट्रिंग से Date ऑब्जेक्ट पुनः स्थापित करने या अलग पास के बिना कुंजियों का नाम बदलने के लिए उपयोगी।

JavaScript — parse JSON output and query rows
const csv = `endpoint,method,avg_latency_ms,error_rate
/api/v2/orders,POST,342,0.02
/api/v2/health,GET,12,0.00
/api/v2/payments,POST,890,0.15
/api/v2/users,GET,45,0.01`

// चरण 1: CSV को JSON स्ट्रिंग में बदलें
const jsonString = csvToJson(csv, { coerce: true })

// चरण 2: JavaScript ऐरे में वापस पार्स करें
const endpoints = JSON.parse(jsonString)

// सत्यापित करें कि यह ऐरे है
console.log(Array.isArray(endpoints))  // true

// उच्च-विलंबता एंडपॉइंट फ़िल्टर करें
const slow = endpoints.filter(ep => ep.avg_latency_ms > 200)
console.log(slow.map(ep => ep.endpoint))
// ["/api/v2/orders", "/api/v2/payments"]

// पहली row को destructure करें
const [first, ...rest] = endpoints
console.log(first.endpoint)  // "/api/v2/orders"
console.log(rest.length)     // 3

आगे processing से पहले conversion output validate करते समय JSON.parse() के लिए एक सुरक्षित रैपर उपयोगी है। यदि CSV रूपांतरण किसी कारण से विकृत JSON उत्पन्न करता है (छोटा किया गया इनपुट, एन्कोडिंग त्रुटियाँ), तो यह बिना क्रैश हुए उसे पकड़ता है:

JavaScript — safe parse wrapper
function safeParse(jsonString) {
  try {
    return { data: JSON.parse(jsonString), error: null }
  } catch (err) {
    return { data: null, error: err.message }
  }
}

// वैध आउटपुट
const result = safeParse(csvToJson(csv))
if (result.error) {
  console.error('CSV रूपांतरण ने अवैध JSON उत्पन्न किया:', result.error)
} else {
  console.log(`${result.data.length} पंक्तियाँ पार्स की गईं`)
}

// JSON.parse को कच्चा CSV गलती से पास करना — यह विफल होता है
const bad = safeParse('name,email\nArjun,arjun@nexuslabs.io')
console.log(bad.error)  // "Unexpected token 'a', "name,email"... is not valid JSON"

कुंजी नाम बदलने और सत्यापन के लिए Reviver

reviver फ़ंक्शन पार्सिंग के दौरान सबसे भीतरी प्रॉपर्टी से बाहर की ओर प्रत्येक key-value युग्म प्राप्त करता है। किसी कुंजी के लिए undefined लौटाने पर वह परिणाम से पूरी तरह हट जाती है; भिन्न मान लौटाने पर वह प्रतिस्थापित हो जाती है। reviver हेडर का नाम बदलने (camelCase से snake_case), आंतरिक फ़ील्ड हटाने, या आवश्यक columns की validation के लिए useful है। इसे root value के साथ अंत में call किया जाता है (खाली स्ट्रिंग कुंजी), जहाँ आप अपवाद फेंकते हैं यदि परिणाम ऐरे नहीं है।

JavaScript — reviver for key renaming and shape validation
const jsonString = csvToJson(`employeeId,firstName,hiredDate
EMP-2847,Arjun,2024-03-15
EMP-3012,Priya,2023-11-01`, { coerce: false })

const camelToSnake = str => str.replace(/[A-Z]/g, c => '_' + c.toLowerCase())

const employees = JSON.parse(jsonString, function(key, value) {
  // मूल मान — आकार सत्यापित करें
  if (key === '') {
    if (!Array.isArray(value)) throw new Error('CSV से JSON ऐरे अपेक्षित था')
    return value
  }
  // camelCase हेडर कुंजियों का नाम snake_case में बदलें
  if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
    return Object.fromEntries(
      Object.entries(value).map(([k, v]) => [camelToSnake(k), v])
    )
  }
  return value
})

console.log(employees[0])
// { employee_id: 'EMP-2847', first_name: 'Arjun', hired_date: '2024-03-15' }

फ़ाइल और API प्रतिक्रिया से CSV बदलना

उत्पादन में CSV डेटा वास्तव में जहाँ से आता है: डिस्क पर फ़ाइलें और HTTP प्रतिक्रियाएँ। दोनों परिदृश्यों में त्रुटि प्रबंधन आवश्यक है क्योंकि इनपुट बाह्य और अनियंत्रित है।

CSV फ़ाइल पढ़ें, बदलें, JSON लिखें

Node.js 18+ — file conversion
import { readFileSync, writeFileSync } from 'node:fs'

function csvToJsonFromFile(inputPath, outputPath) {
  let csvText
  try {
    csvText = readFileSync(inputPath, 'utf8')
  } catch (err) {
    throw new Error(`${inputPath} पढ़ने में विफल: ${err.message}`)
  }

  const lines = csvText.trim().split('\n')
  if (lines.length < 2) {
    throw new Error(`${inputPath} में कोई डेटा पंक्तियाँ नहीं हैं (केवल ${lines.length} पंक्ति)`)
  }

  const headers = lines[0].split(',').map(h => h.trim())
  const rows = lines.slice(1)
    .filter(line => line.trim() !== '')
    .map(line => {
      const values = line.split(',')
      return Object.fromEntries(headers.map((h, i) => [h, values[i]?.trim()]))
    })

  const jsonOutput = JSON.stringify(rows, null, 2)
  writeFileSync(outputPath, jsonOutput, 'utf8')
  console.log(`${rows.length} पंक्तियाँ रूपांतरित → ${outputPath}`)
  return rows
}

// उपयोग
const data = csvToJsonFromFile('inventory.csv', 'inventory.json')
console.log(data[0])
// { sku: "WDG-2847", warehouse: "us-east-1", quantity: "150", ... }

API एंडपॉइंट से CSV प्राप्त करें

Node.js 18+ — API response conversion
async function fetchCsvAsJson(url) {
  const response = await fetch(url)
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${response.statusText}`)
  }

  const contentType = response.headers.get('content-type') || ''
  if (!contentType.includes('text/csv') && !contentType.includes('text/plain')) {
    console.warn(`अप्रत्याशित content-type: ${contentType}`)
  }

  const csvText = await response.text()
  const lines = csvText.trim().split('\n')
  const headers = lines[0].split(',').map(h => h.trim())
  const rows = lines.slice(1)
    .filter(line => line.trim() !== '')
    .map(line => {
      const values = line.split(',')
      return Object.fromEntries(headers.map((h, i) => [h, values[i]?.trim()]))
    })

  return rows
}

// उदाहरण: डेटा प्रदाता से विनिमय दर CSV प्राप्त करें
try {
  const rates = await fetchCsvAsJson('https://data.ecb.internal/rates/daily.csv')
  console.log(JSON.stringify(rates.slice(0, 3), null, 2))
  // downstream service को JSON भेजें
  await fetch('https://api.internal/v2/rates', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ data: rates }),
  })
} catch (err) {
  console.error('दर सिंक विफल:', err.message)
}
नोट:JSON.stringify() में replacer तर्क आपको CSV से specific columns को whitelist करने देता है। सिर्फ वे fields include करने के लिए header नामों की ऐरे पास करें: JSON.stringify(rows, ['name', 'email', 'department'])। ऐरे में नहीं होने वाली प्रॉपर्टी आउटपुट से चुपचाप बाहर हो जाती हैं।

कमांड-लाइन CSV से JSON रूपांतरण

Node.js इनलाइन स्क्रिप्ट चला सकता है, और कुछ समर्पित CLI टूल हैं जो बिना स्क्रिप्ट लिखे CSV-to-JSON रूपांतरण संभालते हैं।

bash — Node.js one-liner
# CSV को Node.js इनलाइन स्क्रिप्ट में पाइप करें
cat servers.csv | node -e "
  const lines = require('fs').readFileSync('/dev/stdin','utf8').trim().split('\n');
  const h = lines[0].split(',');
  const rows = lines.slice(1).map(l => Object.fromEntries(h.map((k,i) => [k.trim(), l.split(',')[i]?.trim()])));
  console.log(JSON.stringify(rows, null, 2));
"
bash — Miller (mlr) for CSV to JSON
# Miller संरचित डेटा के लिए Swiss Army knife है
# इंस्टॉल: brew install miller (macOS) या apt install miller (Debian/Ubuntu)
mlr --icsv --ojson cat inventory.csv

# रूपांतरण के दौरान पंक्तियाँ फ़िल्टर करें
mlr --icsv --ojson filter '$quantity > 100' inventory.csv

# विशिष्ट स्तंभ चुनें
mlr --icsv --ojson cut -f sku,warehouse,quantity inventory.csv
bash — csvtojson CLI
# वैश्विक रूप से इंस्टॉल करें
npm install -g csvtojson

# फ़ाइल बदलें
csvtojson servers.csv > servers.json

# stdin से पाइप करें
cat exports/q1-metrics.csv | csvtojson > q1-metrics.json

बड़ी फ़ाइलों के लिए, Miller आमतौर पर csvtojson से बेहतर विकल्प है। Miller C में कार्यान्वित है और CSV को स्ट्रीम के रूप में संसाधित करता है बिना पूरी फ़ाइल को स्मृति में लोड किए, जिसका अर्थ है कि यह स्थिर स्मृति उपयोग पर बहु-गीगाबाइट निर्यात संभालता है। यह इन-प्लेस फ़ील्ड-स्तर संक्रियाओं का भी समर्थन करता है — स्तंभों का नाम बदलना, मानों का प्रकार बदलना, पंक्तियाँ फ़िल्टर करना — इससे पहले कि डेटा JSON बने, इसलिए आप दो-चरणीय पार्स-फिर-रूपांतरण प्रक्रिया से बचते हैं। csvtojson, दूसरी ओर, Node.js में चलता है और अधिक सुविधाजनक है जब बाकी टूलचेन JavaScript है: आप इसके आउटपुट को सीधे Node स्ट्रीम में पाइप कर सकते हैं, इसे लाइब्रेरी के रूप में आयात कर सकते हैं, या कोड में प्रति-स्तंभ प्रकार रूपांतरण के लिए इसके colParser API का उपयोग कर सकते हैं। कच्चे थ्रूपुट और शेल पाइपलाइन के लिए Miller को प्राथमिकता दें; Node.js अनुप्रयोग के साथ गहरे एकीकरण की आवश्यकता होने पर csvtojson को प्राथमिकता दें।

नोट:jq मूल रूप से CSV पार्स नहीं करता। यदि आपको पाइपलाइन में jq चाहिए, तो पहले csvtojson या mlr से JSON में बदलें, फिर फ़िल्टरिंग और रूपांतरण के लिए JSON आउटपुट को jq में पाइप करें।

उच्च-प्रदर्शन विकल्प — PapaParse

manual split(',') दृष्टिकोण वास्तविक CSV फ़ाइलों पर विफल हो जाता है। अल्पविराम वाले उद्धृत फ़ील्ड, अंतर्निहित नई पंक्तियाँ, बचाए गए दोहरे उद्धरण चिह्न — ये सभी एक सरल विभाजक को तोड़ते हैं। PapaParse वह लाइब्रेरी है जिसका उपयोग मैं तब करता हूँ जब CSV अज्ञात स्रोत से आता है। यह हर RFC 4180 edge case handle करता है, automatically delimiter detect करता है, और Node.js और ब्राउज़र दोनों में काम करता है।

bash — install PapaParse
npm install papaparse
JavaScript — PapaParse with type coercion
import Papa from 'papaparse'

const csv = `product,description,price,in_stock
"Widget, Large","A premium widget with ""extra"" features",29.99,true
Bolt Assembly,Standard M8 bolt kit,4.50,true
"Gasket Set","Includes gasket, seal, and O-ring",12.75,false`

const { data, errors, meta } = Papa.parse(csv, {
  header: true,
  dynamicTyping: true,     // संख्याएँ और बूलियन स्वचालित रूप से बदलता है
  skipEmptyLines: true,
  transformHeader: h => h.trim().toLowerCase().replace(/\s+/g, '_'),
})

if (errors.length > 0) {
  console.error('पार्स त्रुटियाँ:', errors)
}

console.log(JSON.stringify(data, null, 2))
// [
//   {
//     "product": "Widget, Large",
//     "description": "A premium widget with \"extra\" features",
//     "price": 29.99,
//     "in_stock": true
//   },
//   ...
// ]
console.log(`${data.length} पंक्तियाँ पार्स की गईं, सीमांकक: "${meta.delimiter}"`)

PapaParse का dynamicTyping विकल्प प्रकार रूपांतरण स्वचालित रूप से करता है — संख्याएँ संख्याएँ बन जाती हैं, "true"/"false" बूलियन बन जाते हैं। यह transformHeader कॉलबैक स्तंभ नामों को snake_case में सामान्यीकृत करता है, जो आपको विभिन्न CSV निर्यात से असंगत हेडर से निपटने से बचाता है। बिना कोई पार्सिंग कोड लिखे त्वरित रूपांतरण के लिए, CSV to JSON कन्वर्टर ब्राउज़र में यह सब संभालता है।

सिंटैक्स हाइलाइटिंग के साथ टर्मिनल आउटपुट

एक बड़े JSON ऐरे को टर्मिनल पर डंप करने से आँखें थक जाती हैं। आउटपुट में सिंटैक्स हाइलाइटिंग जोड़ने से डीबगिंग और विकास के दौरान यह पठनीय बनता है। cli-highlight पैकेज Node.js टर्मिनल में JSON आउटपुट को रंगीन बनाता है।

bash — install cli-highlight
npm install cli-highlight
JavaScript — colorized JSON output in terminal
import { highlight } from 'cli-highlight'

// CSV को JSON ऐरे में बदलने के बाद
const jsonOutput = JSON.stringify(rows, null, 2)

// syntax highlighting के साथ print करें
console.log(highlight(jsonOutput, { language: 'json' }))
// कुंजियाँ, स्ट्रिंग, संख्याएँ, और बूलियन प्रत्येक को अलग रंग मिलते हैं

रंगीन आउटपुट तब उपयोगी होता है जब आप बड़े रूपांतरण परिणाम को इंटरेक्टिव रूप से जाँच रहे हों। JSON कुंजियाँ, स्ट्रिंग मान, संख्याएँ, और बूलियन प्रत्येक को अलग ANSI रंग मिलते हैं, जो किसी फ़ील्ड को पहचानना आसान बनाता है जिसका प्रकार गलत है — उदाहरण के लिए, एक पोर्ट नंबर जो 8080 होना चाहिए लेकिन स्ट्रिंग के रूप में हाइलाइट है क्योंकि रूपांतरण बंद था। यह विशेष रूप से तब उपयोगी है जब स्प्रेडशीट टूल से निर्यात की गई CSV फ़ाइलों को डीबग करते समय जहाँ स्तंभ प्रकार पंक्तियों में असंगत हैं। रंग के बिना, गलत प्रकार के एकल फ़ील्ड के लिए JSON की 50 पंक्तियाँ स्कैन करने का अर्थ है हर मान को व्यक्तिगत रूप से पढ़ना। रंग के साथ, स्ट्रिंग-रंगीन संख्या तुरंत दिखाई देती है।

चेतावनी:सिंटैक्स हाइलाइटिंग आउटपुट में ANSI एस्केप कोड जोड़ती है। इसका उपयोग फ़ाइल में JSON लिखते समय, किसी अन्य प्रोग्राम में पाइप करते समय, या API प्रतिक्रिया बॉडी के रूप में भेजते समय न करें — एस्केप कोड JSON को दूषित कर देंगे। हाइलाइटिंग का उपयोग केवल टर्मिनल प्रदर्शन के लिए करें।

बड़ी CSV फ़ाइलों के साथ काम करना

readFileSync() से 500 MB CSV फ़ाइल को स्ट्रिंग में लोड करने से स्मृति समाप्त हो जाएगी और संभावित रूप से आपकी प्रक्रिया बंद हो जाएगी। बड़ी फ़ाइलों के लिए, CSV को पंक्ति दर पंक्ति स्ट्रीम करें और JSON ऑब्जेक्ट आते ही उत्पन्न करें। csv-parse पैकेज (npm पर csv पारिस्थितिकी तंत्र का हिस्सा) एक स्ट्रीमिंग पार्सर प्रदान करता है जो Node.js स्ट्रीम के साथ काम करता है।

csv-parse के साथ CSV को NDJSON में स्ट्रीम करना

NDJSON (Newline-Delimited JSON) एक ऐसा प्रारूप है जहाँ आउटपुट फ़ाइल की प्रत्येक पंक्ति एक स्वतंत्र JSON ऑब्जेक्ट है। एकल बड़े JSON ऐरे के विपरीत — जिसके लिए पढ़ना शुरू करने से पहले पूरी फ़ाइल स्मृति में होनी चाहिए — NDJSON फ़ाइलों को पंक्ति दर पंक्ति संसाधित किया जा सकता है। यह NDJSON को उन बड़े डेटासेट के लिए आदर्श बनाता है जो लॉग प्रोसेसर, स्ट्रीम पाइपलाइन, या बल्क-इंपोर्ट API वाले डेटाबेस द्वारा उपभोग किए जाएंगे। csv-parse पैकेज ऑब्जेक्ट मोड में प्रति CSV पंक्ति एक JavaScript ऑब्जेक्ट उत्सर्जित करता है, इसलिए आप इसे सीधे एक ट्रांसफॉर्म स्ट्रीम में पाइप कर सकते हैं जो प्रत्येक JSON.stringify(row) के बाद \n जोड़ता है।

Node.js 18+ — streaming CSV to NDJSON
import { createReadStream, createWriteStream } from 'node:fs'
import { parse } from 'csv-parse'
import { Transform } from 'node:stream'
import { pipeline } from 'node:stream/promises'

// प्रत्येक CSV पंक्ति ऑब्जेक्ट को JSON लाइन में रूपांतरित करें
const toNdjson = new Transform({
  objectMode: true,
  transform(record, encoding, callback) {
    callback(null, JSON.stringify(record) + '\n')
  },
})

await pipeline(
  createReadStream('telemetry-2026-03.csv'),
  parse({
    columns: true,       // पहली पंक्ति को हेडर के रूप में उपयोग करें
    skip_empty_lines: true,
    trim: true,
    cast: true,          // संख्याएँ और बूलियन स्वचालित रूप से बदलें
  }),
  toNdjson,
  createWriteStream('telemetry-2026-03.ndjson')
)

console.log('स्ट्रीमिंग रूपांतरण पूर्ण')
// आउटपुट फ़ाइल में प्रत्येक पंक्ति एक JSON ऑब्जेक्ट है:
// {"timestamp":"2026-03-15T08:22:00Z","service":"gateway","latency_ms":42,"status":200}
// {"timestamp":"2026-03-15T08:22:01Z","service":"auth","latency_ms":156,"status":401}
// ...

ब्राउज़र और Node.js के लिए PapaParse स्ट्रीमिंग

PapaParse की स्ट्रीमिंग मोड एक step कॉलबैक का उपयोग करती है जो सभी पंक्तियाँ स्मृति में एकत्र करने के बजाय प्रति पंक्ति एक बार सक्रिय होती है। आप इसे Node.js ReadStream (Node.js में) या File ऑब्जेक्ट (ब्राउज़र में) पास करते हैं और PapaParse आंतरिक रूप से खंडन संभालता है। कोई स्ट्रीम पाइपलाइन तैयार नहीं करनी — बस एक कॉलबैक। इसका उपयोग करें जब RFC 4180 अनुपालन चाहिए बिना csv-parse शामिल किए।

Node.js — PapaParse streaming large file
import Papa from 'papaparse'
import { createReadStream } from 'node:fs'

let rowCount = 0
const errors = []

const fileStream = createReadStream('warehouse-inventory.csv')

Papa.parse(fileStream, {
  header: true,
  dynamicTyping: true,
  step(result) {
    // एक समय में एक पंक्ति संसाधित करें — स्थिर स्मृति
    rowCount++
    if (result.data.quantity === 0) {
      errors.push(`पंक्ति ${rowCount}: ${result.data.sku} स्टॉक से बाहर है`)
    }
  },
  complete() {
    console.log(`${rowCount} पंक्तियाँ संसाधित`)
    if (errors.length > 0) {
      console.log(`मिली समस्याएँ: ${errors.length}`)
      errors.forEach(e => console.log(`  ${e}`))
    }
  },
  error(err) {
    console.error('पार्स विफल:', err.message)
  },
})
नोट:जब आपकी CSV फ़ाइल 50 MB से अधिक हो या जब आप असीमित इनपुट (WebSocket फ़ीड, server-sent events, पाइप किया गया stdin) संसाधित कर रहे हों तो स्ट्रीमिंग पर स्विच करें। NDJSON प्रारूप (प्रति पंक्ति एक JSON ऑब्जेक्ट) अक्सर बड़े डेटासेट के लिए एक विशाल JSON ऐरे की तुलना में बेहतर आउटपुट प्रारूप है — इसे पूरी फ़ाइल को स्मृति में लोड किए बिना पंक्ति दर पंक्ति संसाधित किया जा सकता है।

सामान्य गलतियाँ

CSV string पर directly JSON.parse() call करना

समस्या: CSV, JSON नहीं है। कच्ची CSV स्ट्रिंग को JSON.parse() में पास करने पर SyntaxError उत्पन्न होती है क्योंकि अल्पविराम और नई पंक्तियाँ वैध JSON वाक्यविन्यास नहीं हैं।

समाधान: पहले split() या किसी library से CSV को JavaScript object में parse करें, फिर JSON.stringify() से JSON बनाएं। JSON.parse() सिर्फ उन strings पर call करें जो already valid JSON हों।

Before · JavaScript
After · JavaScript
const csv = 'name,email\nअर्जुन शर्मा,arjun@nexuslabs.io'
const data = JSON.parse(csv)
// SyntaxError: Unexpected token 'a'
const csv = 'name,email\nअर्जुन शर्मा,arjun@nexuslabs.io'
const lines = csv.trim().split('\n')
const headers = lines[0].split(',')
const rows = lines.slice(1).map(line =>
  Object.fromEntries(headers.map((h, i) => [h, line.split(',')[i]]))
)
const json = JSON.stringify(rows, null, 2)  // वैध JSON स्ट्रिंग
JSON.stringify() की जगह toString() का उपयोग करना

समस्या: JavaScript object पर toString() call करने पर actual data की जगह बेकार string '[object Object]' मिलती है। यह चुपचाप आपका पूरा CSV-to-JSON output बर्बाद कर देता है।

समाधान: JavaScript object को JSON string में convert करने के लिए हमेशा JSON.stringify() use करें। toString() primitive-to-string conversion के लिए है, serialization के लिए नहीं।

Before · JavaScript
After · JavaScript
const row = { server: 'api-gateway', port: 8080 }
const output = row.toString()
// "[object Object]"  — डेटा नष्ट
const row = { server: 'api-gateway', port: 8080 }
const output = JSON.stringify(row, null, 2)
// '{"server":"api-gateway","port":8080}'
उद्धृत फ़ील्ड संभाले बिना अल्पविराम पर विभाजित करना

समस्या: सरल split(",") तब विफल हो जाता है जब CSV मानों में उद्धृत फ़ील्ड के अंदर अल्पविराम होते हैं: "Widget, Large" एक के बजाय दो अलग मान बन जाता है।

समाधान: ऐसे किसी भी CSV डेटा के लिए PapaParse या csv-parse का उपयोग करें जिसे आप पूरी तरह नियंत्रित नहीं करते। यदि manual पार्सिंग आवश्यक है, तो एक state-machine पार्सर कार्यान्वित करें जो ट्रैक करे कि वर्तमान स्थान उद्धृत फ़ील्ड के अंदर है या नहीं।

Before · JavaScript
After · JavaScript
const line = '"Widget, Large","Premium quality",29.99'
const values = line.split(',')
// ["\"Widget", " Large\"", "\"Premium quality\"", "29.99"]
// 3 की बजाय 4 मान — पहला फ़ील्ड गलत विभाजित
import Papa from 'papaparse'
const { data } = Papa.parse('"Widget, Large","Premium quality",29.99')
// data[0] = ["Widget, Large", "Premium quality", "29.99"]
// 3 मान, सही ढंग से पार्स किए
यह भूल जाना कि सभी CSV मान स्ट्रिंग हैं

समस्या: Type conversion के बिना, port: "8080" JSON में number की जगह string रहता है। जो systems numeric types expect करते हैं वो data reject कर देते हैं या गलत handle करते हैं।

समाधान: मैपिंग चरण के दौरान स्पष्ट प्रकार रूपांतरण लागू करें, या dynamicTyping: true के साथ PapaParse का उपयोग करें। हमेशा जानबूझकर तय करें कि कौन से फ़ील्ड संख्यात्मक होने चाहिए।

Before · JavaScript
After · JavaScript
const row = { port: '8443', debug: 'true', workers: '4' }
JSON.stringify(row)
// {"port":"8443","debug":"true","workers":"4"}  — सभी स्ट्रिंग
const row = {
  port: Number('8443'),           // 8443
  debug: 'true' === 'true',      // true
  workers: Number('4'),           // 4
}
JSON.stringify(row)
// {"port":8443,"debug":true,"workers":4}  — सही प्रकार

Manual पार्सिंग बनाम लाइब्रेरी — त्वरित तुलना

विधि
सुव्यवस्थित आउटपुट
वैध JSON
कस्टम प्रकार
स्ट्रीमिंग
इंस्टॉलेशन आवश्यक
JSON.stringify()
✓ (space के साथ)
✓ toJSON()/replacer के माध्यम से
नहीं (अंतर्निर्मित)
JSON.parse()
N/A (पार्सिंग)
✓ (सत्यापित करता है)
✓ reviver के माध्यम से
नहीं (अंतर्निर्मित)
csv-parse (Node.js)
✗ (ऑब्जेक्ट लौटाता है)
✗ (JSON नहीं)
npm install
PapaParse
✗ (ऑब्जेक्ट लौटाता है)
✗ (JSON नहीं)
npm install
csvtojson
✓ colParser के माध्यम से
npm install
jq (CLI)
N/A
सिस्टम इंस्टॉल
Miller (CLI)
N/A
सिस्टम इंस्टॉल

त्वरित स्क्रिप्ट के लिए जहाँ आप CSV प्रारूप नियंत्रित करते हैं और जानते हैं कि कोई उद्धृत फ़ील्ड नहीं हैं, अंतर्निर्मित split() + JSON.stringify() दृष्टिकोण काम करता है और शून्य निर्भरताएँ आवश्यक हैं। उपयोगकर्ता-अपलोड की गई CSV फ़ाइलें संसाधित करने वाले उत्पादन प्रणालियों के लिए, ब्राउज़र में PapaParse या Node.js में csv-parse का उपयोग करें — दोनों RFC 4180 को सही ढंग से संभालते हैं और स्ट्रीमिंग का समर्थन करते हैं। csvtojson पैकेज एकमात्र है जो directly JSON output देता है, single call में parsing और serialization दोनों संभालता है। जब आपको चिपकाने से परिणाम तक सबसे तेज़ मार्ग चाहिए, तो CSV to JSON कन्वर्टर बिना किसी सेटअप के ब्राउज़र में सब कुछ संभालता है।

अक्सर पूछे जाने वाले प्रश्न

बिना किसी लाइब्रेरी के JavaScript में CSV को JSON में कैसे बदलें?

CSV स्ट्रिंग को पंक्तियाँ प्राप्त करने के लिए नई लाइन द्वारा विभाजित करें, split(",") से पहली पंक्ति से हेडर निकालें, फिर शेष पंक्तियों को उन हेडर से कुंजीबद्ध ऑब्जेक्ट में मैप करें। सुव्यवस्थित JSON स्ट्रिंग उत्पन्न करने के लिए JSON.stringify(array, null, 2) से समाप्त करें। यह तरीका सरल CSV फ़ाइलों के लिए उपयुक्त है जहाँ आप प्रारूप नियंत्रित करते हैं और जानते हैं कि कोई उद्धृत फ़ील्ड या अंतर्निहित अल्पविराम नहीं हैं। स्प्रेडशीट निर्यात या तृतीय-पक्ष प्रणालियों के डेटा के लिए, उद्धृत फ़ील्ड और बहु-पंक्ति मान एक सरल विभाजक को तोड़ देंगे — ऐसे मामलों में PapaParse या csv-parse का उपयोग करें। ब्राउज़र में प्रसंस्कृत बहुत छोटी फ़ाइलों के लिए, यह शून्य-निर्भरता दृष्टिकोण आदर्श है।

JavaScript
const csv = `name,email,department
अर्जुन शर्मा,arjun@nexuslabs.io,Engineering
प्रिया पटेल,priya@nexuslabs.io,Product`

const lines = csv.trim().split('\n')
const headers = lines[0].split(',')
const rows = lines.slice(1).map(line => {
  const values = line.split(',')
  return Object.fromEntries(headers.map((h, i) => [h.trim(), values[i]?.trim()]))
})

console.log(JSON.stringify(rows, null, 2))
// [
//   { "name": "अर्जुन शर्मा", "email": "arjun@nexuslabs.io", "department": "Engineering" },
//   { "name": "प्रिया पटेल", "email": "priya@nexuslabs.io", "department": "Product" }
// ]

ऑब्जेक्ट के लिए JSON.stringify() और toString() में क्या अंतर है?

किसी सामान्य ऑब्जेक्ट पर toString() अनुपयोगी स्ट्रिंग "[object Object]" लौटाता है — यह वास्तविक डेटा के बारे में कुछ नहीं बताता। JSON.stringify() सभी कुंजियों और मानों के साथ एक वैध JSON स्ट्रिंग उत्पन्न करता है, जिसमें नेस्टेड ऑब्जेक्ट और ऐरे भी शामिल हैं। जब आपको एक JavaScript ऑब्जेक्ट (जैसे CSV से प्राप्त पंक्ति) को JSON स्ट्रिंग में बदलना हो तो हमेशा JSON.stringify() का उपयोग करें। संक्रिया को उलटने के लिए — JSON स्ट्रिंग से सक्रिय JavaScript ऑब्जेक्ट पुनः निर्मित करने के लिए — JSON.parse() का उपयोग करें, जो JSON.stringify() का सटीक विपरीत है। ये दोनों फ़ंक्शन एक पूर्ण चक्र बनाते हैं: डेटा सुरक्षित रखने या प्रेषित करने के लिए stringify, उपयोग के लिए parse।

JavaScript
const row = { name: 'अर्जुन शर्मा', role: 'Engineer' }

console.log(row.toString())       // "[object Object]"
console.log(JSON.stringify(row))   // '{"name":"अर्जुन शर्मा","role":"Engineer"}'

अल्पविराम या उद्धरण चिह्न वाले CSV फ़ील्ड को कैसे संभालें?

RFC 4180 निर्दिष्ट करता है कि अल्पविराम, नई पंक्ति, या दोहरे उद्धरण चिह्न वाले फ़ील्ड दोहरे उद्धरण चिह्नों में लपेटे जाने चाहिए, और अंतर्निहित उद्धरणों को दोगुना करके बचाया जाना चाहिए (उद्धृत फ़ील्ड के अंदर "" एकल शाब्दिक उद्धरण को दर्शाता है)। इन फ़ाइलों पर manual split(",") विफल हो जाता है — फ़ील्ड सीमा अब एक सामान्य अल्पविराम नहीं रहती। उत्पादन डेटा के लिए PapaParse या csv-parse का उपयोग करें, या एक state-machine पार्सर लिखें जो यह ट्रैक करे कि आप उद्धृत फ़ील्ड के अंदर हैं या नहीं। सही state machine लिखना आश्चर्यजनक रूप से जटिल है: आपको फ़ील्ड की शुरुआत में उद्धरण, बीच में बचाए गए उद्धरण, उद्धृत फ़ील्ड में नई पंक्तियाँ, और विभिन्न पंक्ति-समाप्ति परंपराएँ (CRLF बनाम LF) संभालनी होती हैं। साधारण CSV डेटा से परे किसी भी चीज़ के लिए, परीक्षित लाइब्रेरी का उपयोग करें।

JavaScript
// PapaParse RFC 4180 को सही ढंग से संभालता है
import Papa from 'papaparse'

const csv = `product,description,price
"Widget, Large","A big ""widget""",29.99
Bolt,Standard bolt,1.50`

const { data } = Papa.parse(csv, { header: true })
console.log(JSON.stringify(data, null, 2))
// description फ़ील्ड में सही ढंग से शामिल है: A big "widget"

क्या मैं सीधे ब्राउज़र में CSV को JSON में बदल सकता/सकती हूँ?

हाँ। JSON.stringify() और JSON.parse() दोनों प्रत्येक ब्राउज़र इंजन में अंतर्निर्मित हैं। CSV पार्सिंग चरण के लिए, सरल फ़ाइलों के लिए नई पंक्ति और अल्पविराम द्वारा विभाजित कर सकते हैं, या CDN के माध्यम से PapaParse शामिल कर सकते हैं (इसकी Node.js पर कोई निर्भरता नहीं है)। संपूर्ण रूपांतरण क्लाइंट-साइड होता है बिना किसी सर्वर के, जो फ़ाइल गोपनीयता के लिए उपयोगी है — कच्चा CSV डेटा उपयोगकर्ता की मशीन से बाहर नहीं जाता। जब उपयोगकर्ता <input type="file"> तत्व के माध्यम से CSV फ़ाइल अपलोड करता है, तो File API का file.text() मेथड एक Promise लौटाता है जो फ़ाइल की सामग्री स्ट्रिंग के रूप में प्रदान करता है, जिसे आप अपने रूपांतरण फ़ंक्शन में पास कर सकते हैं। यह डैशबोर्ड, डेवलपर टूल, और किसी भी ऐप के लिए बिना बैकएंड के अपलोड किए गए डेटा को संसाधित करना व्यावहारिक बनाता है।

JavaScript
// ब्राउज़र: उपयोगकर्ता एक CSV फ़ाइल अपलोड करता है
const fileInput = document.querySelector('input[type="file"]')
fileInput.addEventListener('change', async (event) => {
  const file = event.target.files[0]
  const text = await file.text()
  const lines = text.trim().split('\n')
  const headers = lines[0].split(',')
  const rows = lines.slice(1).map(line =>
    Object.fromEntries(headers.map((h, i) => [h.trim(), line.split(',')[i]?.trim()]))
  )
  console.log(JSON.stringify(rows, null, 2))
})

CSV से संख्यात्मक और बूलियन मान कैसे पार्स करें बजाय सब कुछ स्ट्रिंग रखने के?

CSV में कोई प्रकार प्रणाली नहीं है — प्रत्येक फ़ील्ड एक स्ट्रिंग है। आपको मैपिंग चरण के दौरान मानों को रूपांतरित करना होगा। Number() या parseFloat() से संख्यात्मक प्रतिरूपों की जाँच करें, "true"/"false" को बूलियन में बदलें, और खाली स्ट्रिंग को null के रूप में संभालें। उन फ़ील्ड से सावधान रहें जो संख्याओं जैसे दिखते हैं लेकिन स्ट्रिंग ही रहने चाहिए: "400017" जैसे पिन कोड Number() से रूपांतरित करने पर अग्रणी शून्य खो देते हैं, और संख्यात्मक वर्णों वाले फ़ोन नंबर या उत्पाद कोड भी इसी तरह नाजुक होते हैं। csvtojson लाइब्रेरी अपने colParser विकल्प के माध्यम से स्वचालित प्रकार रूपांतरण करती है, जो आपको प्रति-स्तंभ रूपांतरण फ़ंक्शन निर्दिष्ट करने और समस्याग्रस्त स्तंभों के लिए स्वत:-पहचान को ओवरराइड करने देती है। PapaParse का dynamicTyping विकल्प सभी स्तंभों में समान रूपांतरण वैश्विक रूप से लागू करता है।

JavaScript
function coerceValue(val) {
  if (val === '') return null
  if (val === 'true') return true
  if (val === 'false') return false
  const num = Number(val)
  if (!isNaN(num) && val.trim() !== '') return num
  return val
}

// CSV-से-ऑब्जेक्ट मैपिंग के दौरान लागू करें
const row = { port: coerceValue('8443'), debug: coerceValue('true'), host: coerceValue('api.internal') }
// { port: 8443, debug: true, host: "api.internal" }

Node.js में CSV-to-JSON आउटपुट को फ़ाइल में कैसे लिखें?

JSON.stringify() आउटपुट के साथ fs.writeFileSync() का उपयोग करें। JSON.stringify का तीसरा तर्क इंडेंटेशन नियंत्रित करता है — दो-स्थान इंडेंट के लिए 2 या टैब के लिए "\t" पास करें। फ़ाइल वापस पढ़ने के लिए JSON.parse(fs.readFileSync(path, "utf8")) का उपयोग करें, जो JavaScript ऑब्जेक्ट की ऐरे पुनः निर्मित करता है। यदि आप किसी async संदर्भ में फ़ाइल लिख रहे हैं, तो फ़ाइल लेखन के दौरान इवेंट लूप को अवरुद्ध होने से बचाने के लिए fs.promises.writeFile() को प्राथमिकता दें। कुछ मेगाबाइट से अधिक के बड़े JSON आउटपुट के लिए, लिखने से पहले पूरी स्ट्रिंग को स्मृति में बनाने के बजाय WriteStream में JSON स्ट्रीम पाइप करने पर विचार करें।

JavaScript
import { writeFileSync, readFileSync } from 'node:fs'

// लिखें
const jsonOutput = JSON.stringify(rows, null, 2)
writeFileSync('employees.json', jsonOutput, 'utf8')

// वापस पढ़ें
const parsed = JSON.parse(readFileSync('employees.json', 'utf8'))
console.log(Array.isArray(parsed))  // true
console.log(parsed[0].name)         // "अर्जुन शर्मा"

संबंधित टूल

इसमें भी उपलब्ध:Python
AC
Alex ChenFront-end & Node.js Developer

Alex is a front-end and Node.js developer with extensive experience building web applications and developer tooling. He is passionate about web standards, browser APIs, and the JavaScript ecosystem. In his spare time he contributes to open-source projects and writes about modern JavaScript patterns, performance optimisation, and everything related to the web platform.

SL
Sophie Laurentतकनीकी समीक्षक

Sophie is a full-stack developer focused on TypeScript across the entire stack — from React frontends to Express and Fastify backends. She has a particular interest in type-safe API design, runtime validation, and the patterns that make large JavaScript codebases stay manageable. She writes about TypeScript idioms, Node.js internals, and the ever-evolving JavaScript module ecosystem.