[英]How to map the json by key for such API response
这就是API响应的样子。
{
"keys": ["CustomerId", "Name", "Gender"],
"value": [["1", "Ram", "Male"]]
}
角度虚拟机
function Customer(){
return this.Customer = {
"CustId": "",
"Name": "",
"Gender": "",
}
}
角AJAX调用。
$http.get(url)
.then(function(data)){
var cust = new Customer();
//for now I am doing this way.
cust.Id = data.value[0][0];
cust.Name = data.value[0][1];
cust.Gender = data.value[0][1];
}
我不想按索引映射属性。
这些API不在我的控制范围内
有什么办法,我可以在下面按键(作为响应)映射属性。
cust.Id = data.value[0]["CustomerId"];
cust.Name = data.value[0]["Name"];
cust.Gender = data.value[0]["Gender"];
任何帮助/建议高度赞赏。
我能看到的达到这种目的的唯一方法是找到每个键的索引,并在访问这样的值时将其用作索引:
$http.get(url)
.then(function(data){
var cust = new Customer();
cust.Id = data.value[0][data.keys.indexOf('CustomerId')];
cust.Name = data.value[0][data.keys.indexOf('Name')];
cust.Gender = data.value[0][data.keys.indexOf('Gender')];
});
但是请注意,这仅在键和值匹配时才起作用...我认为它们会匹配。
如果您能够使用ES6,最好的解决方法(针对此制作不当的API)将是创建一个解析器函数,如下所示:
function parseResponse(response) {
const {keys, value: objects} = response;
return objects.map(object => {
const parsedValue = {};
keys.forEach((key, index) => {
parsedValue[key] = object[index];
});
return parsedValue;
});
}
测试:
const response = {
"keys": ["CustomerId", "Name", "Gender"],
"value": [["1", "Ram", "Male"]]
};
parseResponse(response); // Outputs [{CustomerId: "1", Name: "Ram", Gender: "Male"}]
如果您愿意,我可以使用ES5做到这一点。 只需说一句话:)
编辑
ES5版本:
function parseResponse(response) {
var keys = response.keys;
var objects = response.value;
var response = [];
for (let i = 0; i < objects.length; i++) {
var formattedValue = {};
for (let j = 0; j < keys.length; j++) {
var key = keys[j];
formattedValue[key] = objects[i][j];
}
response.push(formattedValue);
}
return response;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.