Javascript 使用Jquery重新格式化json数据
我需要转换以下JSON数据:Javascript 使用Jquery重新格式化json数据,javascript,jquery,json,Javascript,Jquery,Json,我需要转换以下JSON数据: var response = { "data": { "List": [ { "Name": "Mary", "state": "AZ", "Matriculation": "complete", "Graduation": "complete", "Masters": "co
var response = {
"data": {
"List": [
{
"Name": "Mary",
"state": "AZ",
"Matriculation": "complete",
"Graduation": "complete",
"Masters": "complete",
"Phd": "notStarted"
},
{
"Name": "Stephanie",
"state": "CT",
"Matriculation": "complete",
"Graduation": "complete",
"Masters": "complete",
"Phd": "notStarted"
},
{
"Name": "John",
"state": "CT",
"Matriculation": "complete",
"Graduation": "planning",
"Masters": "notStarted",
"Phd": "notStarted"
}]
}
}
使用jQuery将其转换为以下内容:
[
{
"state":"AZ",
"Matriculation":[
{
"Name":"Mary",
"status":"complete"
}
],
"Graduation":[
{
"Name":"Mary",
"status":"complete"
}
],
"Masters":[
{
"Name":"Mary",
"status":"complete"
}
],
"Phd":[
{
"Name":"Mary",
"status":"notStarted"
}
]
},
{
"state":"CT",
"Matriculation":[
{
"Name":"Stephanie",
"status":"complete"
},
{
"Name":"John",
"status":"complete"
}
],
"Graduation":[
{
"Name":"Stephanie",
"status":"complete"
},
{
"Name":"John",
"status":"planning"
}
],
"Masters":[
{
"Name":"Stephanie",
"status":"complete"
},
{
"Name":"John",
"status":"notStarted"
}
],
"Phd":[
{
"Name":"Stephanie",
"status":"notStarted"
},
{
"Name":"John",
"status":"notStarted"
}
]
}
]
这是我迄今为止一直尝试的零进展。
我试图先为一个州完成这项工作
这是小提琴:
感谢您的指导。
我不熟悉JSON操作
提前谢谢 您应该做的第一件事是分析源格式和目标格式
- 您的源文件格式只是个人对象的数组
- 您的目的地格式是按州对人员进行分组的对象 并分为若干类别
state
的属性,该属性具有该对象表示的状态的值。您需要一个函数,该函数可以查看此数组中的特定状态,并为您返回现有对象。如果状态不存在,它应该为您向数组添加一个新条目并返回该条目
由于JSON只是表示JavaScript对象符号,并且您实际上正在使用JavaScript对象,因此您应该创建一个对象,对目标数组的每个条目进行建模。我将把这些称为状态摘要
function StateSummary(state) {
this.state = state;
this.Matriculation = [];
this.Graduation = [];
this.Masters = [];
this.Phd = [];
}
您能看到这个对象如何表示目标数组中的每个条目吗
现在您有了一个为每个条目建模的对象,我们需要一个函数来检查特定状态的条目是否已经存在。如果它存在,它将返回该对象。如果它不存在,它将向数组中添加一个新对象,并返回这个新对象
function addOrGetState(array, state) {
for (var i = 0; i < array.length; i++) {
var obj = array[i];
if (obj.state === state)
return obj;
}
//If the function got here, then it didn't find a matching state.
var obj = new StateSummary(state);
array.push(obj); //Add the new object to the array.
return obj; //Return the new object.
}
最后一部分是迭代源数组,并将该数据传递到目标数组中
var sourceArray = response.data.List; //You provided this.
var destinationArray = []; //Allocate a new array to put stuff in.
for (var i = 0; i < sourceArray.length; i++) {
var person = sourceArray[i]; //Each entry of the source array represents a person.
var stateSummary = addOrGetState(destinationArray, person.state);
addPersonToStateSummary(person, stateSummary);
}
var sourceArray=response.data.List//你提供了这个。
var destinationArray=[]//分配一个新数组以放入内容。
对于(var i=0;i
这会给你你想要的。我希望这个分解能教会你如何以分析的方式思考问题,先分解步骤,然后用代码解决它们
下面是一个演示:
var响应={
“数据”:{
“名单”:[{
“姓名”:“玛丽”,
“州”:“AZ”,
“预科”:“完成”,
“毕业”:“完成”,
“大师”:“完成”,
“博士”:“未开始”
}, {
“姓名”:“斯蒂芬妮”,
“州”:“CT”,
“预科”:“完成”,
“毕业”:“完成”,
“大师”:“完成”,
“博士”:“未开始”
}, {
“姓名”:“约翰”,
“州”:“CT”,
“预科”:“完成”,
“毕业”:“计划”,
“主控”:“未启动”,
“博士”:“未开始”
}]
}
};
函数状态摘要(状态){
this.state=状态;
这个。预科=[];
这个。毕业=[];
这个.Masters=[];
这个.Phd=[];
}
函数addOrGetState(数组、状态){
对于(var i=0;i
您应该做的第一件事是分析源格式和目标格式
- 您的源文件格式只是个人对象的数组
- 您的目的地格式是按州对人员进行分组的对象
并分为若干类别
接下来,考虑如何将源代码导入到该目标中
您需要迭代源中的每个人,并尝试将其添加到状态数组中。现在,我要说的是,您的目标格式有点奇怪,但是通过编写几个助手函数,您可以实现这种格式
再次查看您的目标格式。这是一个对象数组。该数组中每个对象的一部分是一个名为state
的属性,该属性具有该对象表示的状态的值。您需要一个函数,该函数可以查看此数组中的特定状态,并为您返回现有对象。如果状态不存在,它应该为您向数组添加一个新条目并返回该条目
由于JSON仅仅意味着JavaScript对象符号,并且您实际上正在使用JavaScript对象,因此您应该创建一个对象来为每个entr建模
var sourceArray = response.data.List; //You provided this.
var destinationArray = []; //Allocate a new array to put stuff in.
for (var i = 0; i < sourceArray.length; i++) {
var person = sourceArray[i]; //Each entry of the source array represents a person.
var stateSummary = addOrGetState(destinationArray, person.state);
addPersonToStateSummary(person, stateSummary);
}