更改Json数据结构
问题描述:
我有一个从服务器端生成这个结构的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
作为例子,它不给我想要的结构。 任何人都可以帮助我或给一些框架来解决这个问题。
答
你已经把下面提到的代码放到你的服务器端返回值的地方。
return“report:”。json_encode('you_array_return_value');
答
你应该使用._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>
答
你可以使用图书馆像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>
答
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这种东西
什么是“R”在代码 –
它来自ramdajs库http://ramdajs.com/。用于访问该库函数 – user93