Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Jquery重新格式化json数据_Javascript_Jquery_Json - Fatal编程技术网

Javascript 使用Jquery重新格式化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

我需要转换以下JSON数据:

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);
}