2017-09-26 224 views
0

我有一个从服务器端生成这个结构的json文件。更改Json数据结构

"reports": [ 
    { 
    "internalId": 60, 
    "state": "DIAGNOSIS_APPROVAL", 
    "project": "pro1", 
    "application": "app1", 
    "decision": null, 
    "reference": "IMUPT17_60", 
    "instanceName": "Report" 
    }, 
    { 
    "internalId": 62, 
    "state": "DIAGNOSIS_APPROVAL", 
    "project": "pro1", 
    "application": "app2", 
    "decision": null, 
    "reference": "IMUPT17_62", 
    "instanceName": "Report" 
    }, 
    { 
    "internalId": 65, 
    "state": "DIAGNOSIS_APPROVAL", 
    "project": "pro1", 
    "application": "app3", 
    "decision": null, 
    "reference": "IMUPT17_62", 
    "instanceName": "Report" 
    }, 


    { 
    "internalId": 62, 
    "state": "DIAGNOSIS_APPROVAL", 
    "project": "pro1", 
    "application": "app2", 
    "decision": null, 
    "reference": "IMUPT17_62", 
    "instanceName": "Report" 
    } 

我想通过组项目中的数据,所以我希望新的JSON stucture会是这样

"pro1": [ 
    { 
    "internalId": 60, 
    "state": "DIAGNOSIS_APPROVAL", 
    "application": "app1", 
    "decision": null, 
    "reference": "IMUPT17_60", 
    "instanceName": "Report" 
    }, 
    { 
    "internalId": 62, 
    "state": "DIAGNOSIS_APPROVAL", 
    "project": "pro1", 
    "application": "app2", 
    "decision": null, 
    "reference": "IMUPT17_62", 
    "instanceName": "Report" 
    }, 
    { 
    "internalId": 62, 
    "state": "DIAGNOSIS_APPROVAL", 
    "project": "pro1", 
    "application": "app3", 
    "decision": null, 
    "reference": "IMUPT17_62", 
    "instanceName": "Report" 
    }, 


    { 
    "internalId": 62, 
    "state": "DIAGNOSIS_APPROVAL", 
    "project": "pro1", 
    "application": "app2", 
    "decision": null, 
    "reference": "IMUPT17_62", 
    "instanceName": "Report" 
    } 

的问题是,我没有访问服务器端的创建服务产生我想要的结构,所以我必须使用existant服务。 当我使用_.groupBy作为例子,它不给我想要的结构。 任何人都可以帮助我或给一些框架来解决这个问题。

回答

0

你已经把下面提到的代码放到你的服务器端返回值的地方。

return“report:”。json_encode('you_array_return_value');

0

你应该使用._groupBy方法从underscore.js库,它会工作。

let obj={"reports": [ { "internalId": 60, "state": "DIAGNOSIS_APPROVAL", "project": "pro1", "application": "app1", "decision": null, "reference": "IMUPT17_60", "instanceName": "Report" }, { "internalId": 62, "state": "DIAGNOSIS_APPROVAL", "project": "pro1", "application": "app2", "decision": null, "reference": "IMUPT17_62", "instanceName": "Report" }, { "internalId": 65, "state": "DIAGNOSIS_APPROVAL", "project": "pro1", "application": "app3", "decision": null, "reference": "IMUPT17_62", "instanceName": "Report" },{ "internalId": 62, "state": "DIAGNOSIS_APPROVAL", "project": "pro1", "application": "app2", "decision": null, "reference": "IMUPT17_62", "instanceName": "Report" }]} 
 
var groups = _.groupBy(obj.reports, 'project'); 
 
console.log(groups)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.2/underscore.js"></script>

0

你可以使用图书馆像ramdajs来实现这一点很容易

const data = { 
 
    "reports": [{ 
 
     "internalId": 60, 
 
     "state": "DIAGNOSIS_APPROVAL", 
 
     "project": "pro1", 
 
     "application": "app1", 
 
     "decision": null, 
 
     "reference": "IMUPT17_60", 
 
     "instanceName": "Report" 
 
    }, 
 
    { 
 
     "internalId": 62, 
 
     "state": "DIAGNOSIS_APPROVAL", 
 
     "project": "pro1", 
 
     "application": "app2", 
 
     "decision": null, 
 
     "reference": "IMUPT17_62", 
 
     "instanceName": "Report" 
 
    }, 
 
    { 
 
     "internalId": 65, 
 
     "state": "DIAGNOSIS_APPROVAL", 
 
     "project": "pro1", 
 
     "application": "app3", 
 
     "decision": null, 
 
     "reference": "IMUPT17_62", 
 
     "instanceName": "Report" 
 
    }, 
 
    { 
 
     "internalId": 62, 
 
     "state": "DIAGNOSIS_APPROVAL", 
 
     "project": "pro1", 
 
     "application": "app2", 
 
     "decision": null, 
 
     "reference": "IMUPT17_62", 
 
     "instanceName": "Report" 
 
    } 
 
    ] 
 
}; 
 

 

 

 
const byProp = R.groupBy(R.prop('project')); 
 

 
const output = byProp(data.reports); 
 
console.log(output);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>

+0

什么是“R”在代码 –

+0

它来自ramdajs库http://ramdajs.com/。用于访问该库函数 – user93

0
var reports = [] // this is the array you get back from server 
var result = {} // this will be the result of the grouping 

// iterate over the result 
reports.forEach(function(report) { 
    // make sure you make a new object for every project 
    if (!result[report.project]){ 
     result[report.project] = [] 
    } 

    // add the line from the result to the result array under the project 
    result[report.project].push(report) 
}) 

本应该做的事情,你是后无需添加框架r这种东西