Реструктуризация JSON на основе фактических и ожидаемых данных - PullRequest
0 голосов
/ 09 июля 2019

Я хочу реструктурировать json на основе исходных данных json и ожидаемых данных json.

Если вы внимательно посмотрите на исходные данные json, у меня есть страна за пределами атрибутов Мужской / Женский. Я хотел бы, чтобы модуль страны был внутри атрибута Мужской / Женский на основе атрибута ориентации внутри модуля страны. Таким образом, в последующих данных у меня был бы 1 модуль страны в атрибуте Male (так как есть 1 мужская запись) и 2 модуля страны в атрибуте Female (так как есть 2 женские записи).

Исходные данные JSON выглядят так:

{
  "Implementations": [
    {      
      "Male": {
        "Gender": "Male"              
      },
      "Female": {
        "Gender": "Female"       
      },

      "Country": [
        {
          "Orientation": "Male",          
          "Name": ABCD
        },
        {
          "Orientation": "Female",
          "Name": EFGH
        },
        {
          "Orientation": "Female",
          "Name": IJKL        
        }
      ],
      "State": [
        {          
          "Address": "XYZ Street",
          "ZipCode": "US"
        }
      ]
    }
  ]
}

Ожидаемые данные JSON:

{ 
  "Implementations":    [
    {      
      "Male": {
        "Gender": "Male"         
         "Country": [
                {
                  "Orientation": "Male",          
                  "Name": ABCD
                }
            ],
              "State": [
                {          
                  "Address": "XYZ Street",
                  "ZipCode": "US"
                }
            ]

      },
      "Female": {
        "Gender": "Female"          
        "Country": [
                {
                  "Orientation": "Female",
                  "Name": EFGH
                },
                {
                  "Orientation": "Female",
                  "Name": IJKL        
                }
              ],
        "State": [
                {          
                  "Address": "XYZ Street",
                  "ZipCode": "US"
                }
            ]
        }
    }
  ]

}

Программа:

 var Implementations = {  
  "Implementations": [
    {      
      "Male": {
        "Gender": "Male"              
      },
      "Female": {
        "Gender": "Female"       
      },

      "Country": [
        {
          "Orientation": "Male",          
          "Name": ABCD
        },
        {
          "Orientation": "Female",
          "Name": EFGH
        },
        {
          "Orientation": "Female",
          "Name": IJKL        
        }
      ],
      "State": [
        {          
          "Address": "XYZ Street",
          "ZipCode": "US"
        }
      ]
    }
  ]
}

var output = [];
for (k in Implementations.Implementations.Male) {
  var temp = [];  
  for (j in Implementations.Implementations.Male[k]) {
    temp.push({
      Country: j      
    });
  }
  output.push({
    "Implementations": k,
    Country: temp
  });
}
console.log(output);

Заранее спасибо!

1 Ответ

1 голос
/ 09 июля 2019

Ваша программа не работает, потому что Implementations.Implementations является массивом, в нем нет поля с именем Male.

Вот фрагмент рабочего кода:

//Original JSON data in question.
var Implementations = {  
  "Implementations": [
    {      
      "Male": {
        "Gender": "Male"              
      },
      "Female": {
        "Gender": "Female"       
      },

      "Country": [
        {
          "Orientation": "Male",          
          "Name": ABCD
        },
        {
          "Orientation": "Female",
          "Name": EFGH
        },
        {
          "Orientation": "Female",
          "Name": IJKL        
        }
      ],
      "State": [
        {          
          "Address": "XYZ Street",
          "ZipCode": "US"
        }
      ]
    }
  ]
}

// Program that make the conversion
var finalResult = [];
for (var i=0; i<Implementations.Implementations.length; i++) {
  var currentImplementation = Implementations.Implementations[i];
  var targetObj = {
    "Male": {
      "Gender": "Male",
      "Country": [],
      "State": currentImplementation.State
    },
    "Female": {
      "Gender": "Female",
      "Country": [],
      "State": currentImplementation.State
    }
  };
  for (var j=0; j<currentImplementation.Country.length; j++) {
    var currentCountry = currentImplementation.Country[j];
    if (currentCountry.Orientation === 'Male') {
      targetObj.Male.Country.push(currentCountry);
    } else if (currentCountry.Orientation === 'Female') {
      targetObj.Female.Country.push(currentCountry);
    }
  }
  finalResult.push(targetObj);
}

console.log(JSON.stringify(finalResult));
...