【问题标题】:Converting data structure of a JSON array for stacked bar chart为堆积条形图转换 JSON 数组的数据结构
【发布时间】:2018-07-30 17:52:09
【问题描述】:

这个问题与我之前提出的一个问题有关:Using JSON in d3v4 stacked bar chart

背景:对于堆积条形图,我试图代表一系列医院,以显示每个患者的诊断所属的类别总数(对于每个医院)。我使用 SQL 查询生成了我的 JSON 文件并将其导出。

问题:如何更改我的 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 代替吗?

【问题讨论】:

    标签: javascript sql json d3.js data-structures


    【解决方案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);

    【讨论】:

    • 将鼠标悬停在提交按钮上,但你打败了我,很好的答案。
    • 嗯...那么,我可以将它添加到我的 d3.json 网址中吗?
    • 是的,我添加了一个小的运行示例。
    • 我明白了。感谢您的帮助。我不知道你可以使用字典来做到这一点。我将使用此方法并进行测试,看看它是否适用于为我的堆叠条形图创建条形。
    • hospital.category = 医院.category ? (hospital.category + "," + d.category) : d.category;
    猜你喜欢
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多