تحويل هيكل البيانات لصفيف JSON لمخطط شريطي مكدس

1

يتعلق هذا السؤال بسؤال سابق طرحته: استخدام JSON في مخطط شريطي مكدس d3v4 .

الخلفية: بالنسبة إلى المخطط الشريطي المكدس ، أحاول تمثيل سلسلة من المستشفيات التي تعرض العدد الإجمالي للفئات (لكل مستشفى) التي ينتمي إليها تشخيص كل مريض. أنتجت ملف JSON الخاص بي باستخدام استعلام SQL وقمت بتصديره.

سؤال: كيف يمكنني تغيير بنية بيانات صفيف JSON لدمج فئات متعددة من المستشفى نفسه؟

تبدو بنية بيانات صفيف JSON (جزء صغير) للمخطط الشريطي المكدس كما يلي:

[{
  "hospitalName": "hospital1",
  "category": "Injury & Poisoning",        
  "Females": "0",
  "Males": "4",
  "Unknown": "0",
  "count": "4"
},
{
  "hospitalName": "hospital1",
  "category": "Symptoms, Signs, & Ill-Defined Conditions",
  "Females": "1",
  "Males": "1",
  "Unknown": "0",
  "count": "2"
},
{
   "hospitalName": "hospital2",
   "category": "Mental Disorders",
    "Females": "0",
    "Males": "1",
    "Unknown": "0",
    "count": "1"
}]

بنية بيانات صفيف JSON المطلوبة:

[{
  "hospitalName": "hospital1",
  "Injury & Poisoning": "4",
  "Symptoms, Signs, & Ill-Defined Conditions": "2"        
  "Females": "1",  <--- the count of females is increased
  "Males": "5",    <--- the count of males is increased 
  "Unknown": "0",
  "count": "6"
},
{
   "hospitalName": "hospital2",
   "category": "Mental Disorders",
    "Females": "0",
    "Males": "1",
    "Unknown": "0",
    "count": "1"
}]

هل من الممكن الإنتاج باستخدام استعلام SQL أم يمكنني استخدام PLSQL بدلاً من ذلك؟

1 إجابة

1
افضل جواب

ما عليك سوى إنشاء قاموس جديد بمفتاح يساوي اسم المستشفى. وبعد ذلك استرجاع جميع العناصر من القاموس.

إذا كنت بحاجة إلى أن يتم احتسابها كسلاسل ، فقم بتحويلها قبل إضافتها مرة أخرى إلى قائمة البيانات.

var newdata = {};

data.forEach(element => {
    var name = element.hospitalName;
    var hospital = newdata[name];
    if (!hospital) {
        hospital = { hospitalName: name, Females: 0, Males: 0, Unknown: 0, count: 0};
        newdata[name] = hospital;
    }
    hospital[element.category] = +element.count;
    hospital.Females += +element.Females;
    hospital.Males   += +element.Males;
    hospital.Unknown += +element.Unknown;
    hospital.count   += +element.count;
});

data = [];

for (const key in newdata) {
    if (newdata.hasOwnProperty(key)) {
        data.push(newdata[key]);
    }
}

كمثال صغير يعمل مع مجموعة البيانات الضخمة الخاصة بك.

var data = [{
  "hospitalName": "hospital1",
  "category": "Injury & Poisoning",        
  "Females": "0",
  "Males": "4",
  "Unknown": "0",
  "count": "4"
},
{
  "hospitalName": "hospital1",
  "category": "Symptoms, Signs, & Ill-Defined Conditions",
  "Females": "1",
  "Males": "1",
  "Unknown": "0",
  "count": "2"
},
{
   "hospitalName": "hospital2",
   "category": "Mental Disorders",
    "Females": "0",
    "Males": "1",
    "Unknown": "0",
    "count": "1"
}];

var newdata = {};

data.forEach(element => {
    var name = element.hospitalName;
    var hospital = newdata[name];
    if (!hospital) {
        hospital = { hospitalName: name, Females: 0, Males: 0, Unknown: 0, count: 0};
        newdata[name] = hospital;
    }
    hospital[element.category] = +element.count;
    hospital.Females += +element.Females;
    hospital.Males   += +element.Males;
    hospital.Unknown += +element.Unknown;
    hospital.count   += +element.count;
});

data = [];

for (const key in newdata) {
    if (newdata.hasOwnProperty(key)) {
        data.push(newdata[key]);
    }
}

console.log(data);

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام