从数组中的 JSON 对象中获取记录
Fetching records from inside a JSON Object inside an Array
我有一个 API 回复采用这种格式。
[{
"response_data": {
"0":{
"id" : 0,
"office" : "India",
"type" : 'Perm'
},
"1":{
id : 0,
"office" : "America",
"type" : 'Perm'
},
"2":{
id : 0,
"office" : "Europe",
"type" : 'Contract'
},
"2":{
id : 0,
"office" : "Latin America",
"type" : 'Contract'
}
}}]
我正在尝试获取所有 office
,其中 type
是 Contract
。我将 json 响应保存在一个变量中,例如 - 使用 Chakram as
var response_json = t.body[0].response_data;
这在 console.log
中给了我正确的响应
"0":{
"id" : 0,
"office" : "India",
"type" : 'Perm'
},
"1":{
id : 0,
"office" : "America",
"type" : 'Perm'
},
"2":{
id : 0,
"office" : "Europe",
"type" : 'Contract'
},
"2":{
id : 0,
"office" : "Latin America",
"type" : 'Contract'
}
现在如何获取json中的相应键并提取所需信息。我试过了,但是 returns undefined
var length = Object.keys(response_json).length;
for(var i = 0; i<= length;i++){
console.log(response_json.i) //returns undefined
console.log((Object.keys(response_json)).id); //returns undefined.
}
我知道如果响应是一个数组,这可以使用 filter
方法解决,但是我如何在 JSON 对象中执行相同的操作?我正在寻找优化的解决方案,因为 API returns 将近 5000 个对象。
如果已经有人问过这个问题,请提供参考,因为我在 SO 上找不到任何参考。
您的代码有两个主要错误,一个是使用 loop
直到 array
的长度,其中索引从 0 开始。第二个是使用方括号而不是 dot
。所以更新代码如下:
var keys = Object.keys(response_json);
var length = keys .length;
for(var i = 0; i< length;i++){
console.log(response_json[keys[i]]);
}
如果你想用过滤方法做到这一点,那么
解决方法是添加 属性 长度,然后使用 Array.from
,如下所示。然后你可以使用Array.prototype.filter
方法。
let o = {
'0': {
id: 0,
"office": "India",
"type": 'Perm'
},
'1': {
id: 0,
"office": "America",
"type": 'Perm'
},
'2': {
id: 0,
"office": "Europe",
"type": 'Contract'
}
};
o.length = Object.keys(o).length;
let a = Array.from(o);
let r = a.filter(({ type }) => type == 'Contract');
console.log(r);
在您的 response_json '0' 和 '1' 上,所有键均为字符串格式。
但是在您的 for 循环中 'i' 是整数,因此密钥不可用。只需将其转换为字符串即可获得所需的结果
像 console.log(response_json[''+i])
var data = [{"response_data": {
'0':{id : 0, "office" : "India", "type" : 'Perm'},
'1':{id : 0, "office" : "America","type" : 'Perm'},
'2':{ id : 0, "office" : "Europe","type" : 'Contract'},
'3':{ id : 0, "office" : "Latin America", "type" : 'Contract'}
}}];
var list = data[0]['response_data'];
var filterList = [];
for(var i in list) {
if(list.hasOwnProperty(i)) {
var type = list[i]['type'];
if(type === 'Contract') {
filterList.push(list[i]);
}
}
}
如果记录超过 5000 条,javascript 可能不会更好,最好在服务器端处理。
我有一个 API 回复采用这种格式。
[{
"response_data": {
"0":{
"id" : 0,
"office" : "India",
"type" : 'Perm'
},
"1":{
id : 0,
"office" : "America",
"type" : 'Perm'
},
"2":{
id : 0,
"office" : "Europe",
"type" : 'Contract'
},
"2":{
id : 0,
"office" : "Latin America",
"type" : 'Contract'
}
}}]
我正在尝试获取所有 office
,其中 type
是 Contract
。我将 json 响应保存在一个变量中,例如 - 使用 Chakram as
var response_json = t.body[0].response_data;
这在 console.log
中给了我正确的响应
"0":{
"id" : 0,
"office" : "India",
"type" : 'Perm'
},
"1":{
id : 0,
"office" : "America",
"type" : 'Perm'
},
"2":{
id : 0,
"office" : "Europe",
"type" : 'Contract'
},
"2":{
id : 0,
"office" : "Latin America",
"type" : 'Contract'
}
现在如何获取json中的相应键并提取所需信息。我试过了,但是 returns undefined
var length = Object.keys(response_json).length;
for(var i = 0; i<= length;i++){
console.log(response_json.i) //returns undefined
console.log((Object.keys(response_json)).id); //returns undefined.
}
我知道如果响应是一个数组,这可以使用 filter
方法解决,但是我如何在 JSON 对象中执行相同的操作?我正在寻找优化的解决方案,因为 API returns 将近 5000 个对象。
如果已经有人问过这个问题,请提供参考,因为我在 SO 上找不到任何参考。
您的代码有两个主要错误,一个是使用 loop
直到 array
的长度,其中索引从 0 开始。第二个是使用方括号而不是 dot
。所以更新代码如下:
var keys = Object.keys(response_json);
var length = keys .length;
for(var i = 0; i< length;i++){
console.log(response_json[keys[i]]);
}
如果你想用过滤方法做到这一点,那么
解决方法是添加 属性 长度,然后使用 Array.from
,如下所示。然后你可以使用Array.prototype.filter
方法。
let o = {
'0': {
id: 0,
"office": "India",
"type": 'Perm'
},
'1': {
id: 0,
"office": "America",
"type": 'Perm'
},
'2': {
id: 0,
"office": "Europe",
"type": 'Contract'
}
};
o.length = Object.keys(o).length;
let a = Array.from(o);
let r = a.filter(({ type }) => type == 'Contract');
console.log(r);
在您的 response_json '0' 和 '1' 上,所有键均为字符串格式。 但是在您的 for 循环中 'i' 是整数,因此密钥不可用。只需将其转换为字符串即可获得所需的结果 像 console.log(response_json[''+i])
var data = [{"response_data": {
'0':{id : 0, "office" : "India", "type" : 'Perm'},
'1':{id : 0, "office" : "America","type" : 'Perm'},
'2':{ id : 0, "office" : "Europe","type" : 'Contract'},
'3':{ id : 0, "office" : "Latin America", "type" : 'Contract'}
}}];
var list = data[0]['response_data'];
var filterList = [];
for(var i in list) {
if(list.hasOwnProperty(i)) {
var type = list[i]['type'];
if(type === 'Contract') {
filterList.push(list[i]);
}
}
}
如果记录超过 5000 条,javascript 可能不会更好,最好在服务器端处理。