Bassel Jhr نشر 28 أغسطس 2021 أرسل تقرير نشر 28 أغسطس 2021 لدي محتوى نصي ضمن بالصيغة CSV تم فصل الأعمدة باستخدام الفاصلة (,) بالشكل التالي: x,y,z,b 100,200,300,400 500,600,700,800 ..... وأرغب بتحويله إلى JSON بحيث يصبح بالشكل التالي: {"x": 100,"y": 200,"z": 300,"b": 400}, {"x": 500,"y": 600,"z": 700,"b": 800}, بحيث تصبح كل قيمة من الأعمدة تقابل جميع القيم الأخرى. كيف يمكنني تحقيق ذلك؟ اقتباس
1 شرف الدين حفني نشر 28 أغسطس 2021 أرسل تقرير نشر 28 أغسطس 2021 يمكنك تحقيق ذلك عن طريق إستخدام الmodule المسمى بcsvtojson ويمكنك الحصول عليه عن طريق تثبيته من خلال حزمة الادوات npm من خلال هذا الأمر npm install csvtojson ولتقم بتحويل ملف csv الى json نفعل كالأتي const csvParser=require("csvtojson"); csvParser().fromFile("ضع هنا مسار الملف").then(jsonFile=>doSomeThing(jsonFile)) وفي حالة كان ملف الcsv ضخم يمكنك تحويله عن طريق استخدام الstream وال pipe كما هو موضح فى المثال أدناه csv() .fromStream(ضع هنا reference لstrem تقم بقراءة الملف) .subscribe(function(json){ //يجب عليك معالجة كل جزأ من الملف على حدة لأنه يصل من خلال الstreamعلى هيئة chunks return new Promise(function(resolve,reject){ doSomeThing(json,function(){resolve()}) }) }) وللتوضيح, الفرق بين الكود بالأعلى وبالأدنى أن بالأعلى يتم قراءة الملف كله في الذاكرة ومن ثم تتم العملية عليه, بينما في المثال بالأدنى يتم قراءة الملف على هيئة اجزاء صغيرة ومعالجة كل جزأ منها على حدة حتى لا تمتلئ الذاكرة اقتباس
1 Ali Haidar Ahmad نشر 28 أغسطس 2021 أرسل تقرير نشر 28 أغسطس 2021 سنقوم بإدخال محتويات ملف CSV في مصفوفة ونقسم محتوى المصفوفة بناءً على المحدد delimiter. سيتم تحويل جميع صفوف CSV إلى كائنات JSON والتي ستتم إضافتها إلى المصفوفة الناتجة والتي سيتم تحويلها بعد ذلك إلى JSON وسيتم إنشاء ملف إخراج JSON مطابق: // fs npm باستخدام حزمة csv نقرأ ملف const fs = require("fs"); csv = fs.readFileSync("CSV_file.csv") // تحويل البيانات إلى سلاسل نصية وتقسيمها في مصفوفة var array = csv.toString().split("\r"); //والتي ستتم إضافتها لتنتج مصفوفة json إلى كائنات csv سيتم تحويل جميع صفوف let result = []; //headers لذا نقوم بتخزينها في مصفوفة ال header على جميع أعمدة ال array[0] تحتوي let headers = array[0].split(", ") //المتبقية n-1 نظرًا لأن الرؤوس مفصولة نحتاج إلى المرور على الصفوف for (let i = 1; i < array.length - 1; i++) { let obj = {} // str إنشاء كائن فارغ لإضافة قيم الصف الحالي إليه لاحقًا. ونقوم بتعريف السلسلة //s كقيمة مصفوفة حالية لتغيير المحدد وتخزين السلسلة التي تم إنشاؤها في سلسلة جديدة let str = array[i] let s = '' // بشكل افتراضي ، نحصل على القيم المفصولة بفواصل لخلية بين علامتي اقتباس "" لذلك نستخدم //(") علامة لتتبع علامات الاقتباس ونقسم السلسلة وفقًا لذلك إذا واجهنا علامة اقتباس افتتاحية //فإننا نحتفظ بالفواصل كما هي ، وإلا فإننا نستبدلها بـ أنبوب | نستمر //s في إضافة الأحرف التي ننتقل إليها إلى سلسلة let flag = 0 for (let ch of str) { if (ch === '"' && flag === 0) { flag = 1 } else if (ch === '"' && flag == 1) flag = 0 if (ch === ', ' && flag === 0) ch = '|' if (ch !== '"') s += ch } // نقوم بتقسيم السلسلة باستخدام محدد الأنبوب وتخزين القيم في مصفوفة خصائص let properties = s.split("|") // لكل رأس ، إذا كانت القيمة تحتوي على بيانات متعددة مفصولة بفواصل ، فإننا // نقوم بتخزينها في شكل مصفوفة وإلا يتم تخزين القيمة مباشرة for (let j in headers) { if (properties[j].includes(", ")) { obj[headers[j]] = properties[j] .split(", ").map(item => item.trim()) } else obj[headers[j]] = properties[j] } // نضيف الكائن الذي تم إنشاؤه إلى مصفوفة النتائج الخاصة بنا result.push(obj) } //JSON تحويل المصفوفة الناتجة إلى let json = JSON.stringify(result); fs.writeFileSync('output.json', json); // والتخزين يتم ضمن الملف الذي نحدده اقتباس
0 Salah Eddin Beriani2 نشر 28 أغسطس 2021 أرسل تقرير نشر 28 أغسطس 2021 قم بإنشاء ملف read-file.js في مجلد مشروعنا الرئيسي و قم بتضمين الكود التالي لهذا الملف: const csvjson = require('csvjson'); const readFile = require('fs').readFile; readFile('./test-data.csv', 'utf-8', (err, fileContent) => { if(err) { console.log(err); // Do something to handle the error or just throw it throw new Error(err); } const jsonObj = csvjson.toObject(fileContent); console.log(jsonObj); }); أولاً نقوم باستيراد التبعيات المطلوبة - حزمة csvjson الخارجية ووحدة نظام الملفات المضمنة (fs) (سنستخدم readFile فقط ، ولهذا السبب نتخذ هذه الطريقة فقط). الجزء التالي من الكود هو المنطق الرئيسي. نقوم بتمرير ثلاث معلمات إلى وظيفة readFile: الأولى هي موقع ملف مصدر CSV الخاص بنا ، والثانية هي الترميز وآخرها هي وظيفة رد الاتصال. هناك ، نتوقع تلقي معلمتين (خطأ إن وجد ومحتوى الملف الفعلي). في حالة وجود خطأ أثناء قراءة الملف (يمكن أن يكون أحد الأسباب هو عدم وجود الملف يجب أن نكون مستعدين للقبض عليه والقيام بشيء ما به. في حالة عدم وجود خطأ ، فنحن على استعداد لتمرير المحتوى إلى مكتبة csvjson ، والتي ستقوم بتحليلها وإرجاع مجموعة من الكائنات. اقتباس
السؤال
Bassel Jhr
لدي محتوى نصي ضمن بالصيغة CSV تم فصل الأعمدة باستخدام الفاصلة (,) بالشكل التالي:
x,y,z,b 100,200,300,400 500,600,700,800 .....
وأرغب بتحويله إلى JSON بحيث يصبح بالشكل التالي:
{"x": 100,"y": 200,"z": 300,"b": 400}, {"x": 500,"y": 600,"z": 700,"b": 800},
بحيث تصبح كل قيمة من الأعمدة تقابل جميع القيم الأخرى. كيف يمكنني تحقيق ذلك؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.