代码之家  ›  专栏  ›  技术社区  ›  foram kantaria

通过jquery将json转换为特定的json格式

  •  1
  • foram kantaria  · 技术社区  · 8 年前

    这是我的JSON输入。我想在每个对象之前附加数据对象,并将其转换为下面给出的特定格式。同样,任何可用的插件都可以。将JSON转换为特定格式

      [  
        {  
      "guid":"6FCBBB6B-4B5E-42C4-B108-12F594DABEE2",
      "companyGuid":"12A5CD86-F6C6-455F-B27A-EFE587ED410D",
      "parentLocationGuid":null,
      "name":"location1",
      "description":"test",
      "isActive":true,
      "row_num":2,
      "children":[  
         {  
            "guid":"6FCBBB6B-4B5E-42C4-B108-12F594DABEE1",
            "companyGuid":"12A5CD86-F6C6-455F-B27A-EFE587ED410D",
            "parentLocationGuid":"6FCBBB6B-4B5E-42C4-B108-12F594DABEE2",
            "name":"child location",
            "description":"test child",
            "isActive":true,
            "row_num":1,
            "children":[  
    
            ]
         }
      ]
      }
      ]
    

    我希望输出为:

       [  
        {  
      "data":{  
         "guid":"6FCBBB6B-4B5E-42C4-B108-12F594DABEE2",
         "companyGuid":"12A5CD86-F6C6-455F-B27A-EFE587ED410D",
         "parentLocationGuid":null,
         "name":"location1",
         "description":"test",
         "isActive":true,
         "row_num":2
      },
      "children":[  
         {  
            "data":{  
               "guid":"6FCBBB6B-4B5E-42C4-B108-12F594DABEE1",
               "companyGuid":"12A5CD86-F6C6-455F-B27A-EFE587ED410D",
               "parentLocationGuid":"6FCBBB6B-4B5E-42C4-B108-12F594DABEE2",
               "name":"child location",
               "description":"test child",
               "isActive":true,
               "row_num":1
            },
            "children":[  
    
            ]
         }
      ]
    }
    ]
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   madjaoue    8 年前

    下面是一个ES6实现,它是您正在尝试实现的。这适用于包含多个元素的列表。

    function formatter(input){
        let output = new Array();
        input.forEach( data_input=>{
          let result = {};
          let children = [];
          result['data'] = {};
          Object.keys(data_input).forEach(key => {
           if (data_input[key] instanceof Object ){
             if(!(data_input[key] instanceof Array && data_input[key].length===0 )) 
             children = data_input[key];
           }
           else{
            result['data'][key] = data_input[key]
           }
        })
          result['children'] = formatter(children);
          output.push({'data': result['data']},{'children': result['children']})
        })
     return output
    }
    
    let myInput = [  
        {  
      "guid":"6FCBBB6B-4B5E-42C4-B108-12F594DABEE2",
      "companyGuid":"12A5CD86-F6C6-455F-B27A-EFE587ED410D",
      "parentLocationGuid":null,
      "name":"location1",
      "description":"test",
      "isActive":true,
      "row_num":2,
      "children":[  
         {  
            "guid":"6FCBBB6B-4B5E-42C4-B108-12F594DABEE1",
            "companyGuid":"12A5CD86-F6C6-455F-B27A-EFE587ED410D",
            "parentLocationGuid":"6FCBBB6B-4B5E-42C4-B108-12F594DABEE2",
            "name":"child location",
            "description":"test child",
            "isActive":true,
            "row_num":1,
            "children":[  
    
            ]
         }
      ]
      }
      ]
    
    
    
    console.log(formatter(myInput))
    
        2
  •  0
  •   charlietfl    8 年前

    const res = data.map(({children,...otherProps})=>({data:{...otherProps}, children}));
    
    console.log(res)
    .as-console-wrapper {max-height: 100%!important;}
    <script>
      var data = [{
        "guid": "6FCBBB6B-4B5E-42C4-B108-12F594DABEE2",
        "companyGuid": "12A5CD86-F6C6-455F-B27A-EFE587ED410D",
        "parentLocationGuid": null,
        "name": "location1",
        "description": "test",
        "isActive": true,
        "row_num": 2,
        "children": [{
          "guid": "6FCBBB6B-4B5E-42C4-B108-12F594DABEE1",
          "companyGuid": "12A5CD86-F6C6-455F-B27A-EFE587ED410D",
          "parentLocationGuid": "6FCBBB6B-4B5E-42C4-B108-12F594DABEE2",
          "name": "child location",
          "description": "test child",
          "isActive": true,
          "row_num": 1,
          "children": [
    
          ]
        }]
      }]
    </script>