我想使用JavaScript或Angularjs或任何javascript库将此示例数据集复制到嵌套JSON中。

数据:

PrimaryId,FirstName,LastName,City,CarName,DogName
100,John,Smith,NewYork,Toyota,Spike
100,John,Smith,NewYork,BMW,Spike
100,John,Smith,NewYork,Toyota,Rusty
100,John,Smith,NewYork,BMW,Rusty
101,Ben,Swan,Sydney,Volkswagen,Buddy
101,Ben,Swan,Sydney,Ford,Buddy
101,Ben,Swan,Sydney,Audi,Buddy
101,Ben,Swan,Sydney,Volkswagen,Max
101,Ben,Swan,Sydney,Ford,Max
101,Ben,Swan,Sydney,Audi,Max
102,Julia,Brown,London,Mini,Lucy


Javascript:

var file = reader.result;
var singleRow = readerFile.split(/\r\n|\n/);
var header = singleRow[0].split(',');
var result =[];

    for ( var i=1; i < file.length; i++ ){
        var elementData = singleRow[i].split(',');
        elementData = elementData.filter(function(n){ return n != "" });
        var Obj = {};

        for ( var j=0; j < header.length; j++ ){
            Obj[header[j]] = elementData[j];
            /*
              - How can i build child object and append back to Obj before j loop
              - How can i build multiple child for same parent
            */
        }
        result.push(Obj);
    }
    console.log(" Print the JSON Object : " + JSON.stringify(result));


所需输出:

{
    "data": [
        {
            "City": "NewYork",
            "FirstName": "John",
            "PrimaryId": 100,
            "LastName": "Smith",
            "CarName": [
                "Toyota",
                "BMW"
            ],
            "DogName": [
                "Spike",
                "Rusty"
            ]
        },
        {
            "City": "Sydney",
            "FirstName": "Ben",
            "PrimaryId": 101,
            "LastName": "Swan",
            "CarName": [
                "Volkswagen",
                "Ford",
                "Audi"
            ],
            "DogName": [
                "Buddy",
                "Max"
            ]
        },
        {
            "City": "London",
            "FirstName": "Julia",
            "PrimaryId": 102,
            "LastName": "Brown",
            "CarName": [
                "Mini"
            ],
            "DogName": [
                "Lucy"
            ]
        }
    ]
}


如果“名字”,“姓氏”和“城市”具有相同的值,则CarName和DogName值应为同一父项下的子对象

最佳答案

我对您的初始代码进行了一些重新格式化,但这并没有改变初始逻辑。一个主要的观察结果是,即使FirstNameLastNameCity相同,也可能不是唯一的人,因此您应该使用PrimaryId来确定唯一性。

查看新代码的后处理部分:

const data = `PrimaryId,FirstName,LastName,City,CarName,DogName
100,John,Smith,NewYork,Toyota,Spike
100,John,Smith,NewYork,BMW,Spike
100,John,Smith,NewYork,Toyota,Rusty
100,John,Smith,NewYork,BMW,Rusty
101,Ben,Swan,Sydney,Volkswagen,Buddy
101,Ben,Swan,Sydney,Ford,Buddy
101,Ben,Swan,Sydney,Audi,Buddy
101,Ben,Swan,Sydney,Volkswagen,Max
101,Ben,Swan,Sydney,Ford,Max
101,Ben,Swan,Sydney,Audi,Max
102,Julia,Brown,London,Mini,Lucy`;

var singleRow = data.split(/\r\n|\n/);
var header = singleRow[0].split(',');
var result =[];

for (var i = 1; i < singleRow.length; i++) {
  var elementData = singleRow[i].split(',');
  elementData = elementData.filter(function(n) { return n != '' });
  var Obj = {};
  for ( var j=0; j < header.length; j++ ){
    Obj[header[j]] = elementData[j];
  }
  result.push(Obj);
}

console.log(JSON.stringify(result, null, 2));


// Post-processing code starts here
const people = {};

// Create a map of unique people first
result.forEach(function (object) {
  if (!people[object.PrimaryId]) {
    people[object.PrimaryId] = {
      City: object.City,
      FirstName: object.FirstName,
      PrimaryId: object.PrimaryId,
      LastName: object.LastName,
      CarName: [],
      DogName: [],
    };
  }
  // As you iterate through your results, if this person already exists
  // add to their array of car and dogs.
  people[object.PrimaryId].CarName.push(object.CarName);
  people[object.PrimaryId].DogName.push(object.DogName);
});

// Convert back into an array
const peopleList = [];
Object.keys(people).forEach(function (primaryId) {
  peopleList.push(people[primaryId]);
})

console.log(peopleList);

关于javascript - 用Javascript构建嵌套的JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43107109/

10-12 12:59
查看更多