Javascript 从阵列节点进行多个api端点调用
从数组调用API端点时遇到问题。该数组包含我需要输入端点的值,以便获取我需要的数据。我遇到的问题是,当我控制台记录来自api调用的数据时,我收到了JSON文本。然而,当我试图解析文本并从JSON文本中获取特定值时,它并没有给出结果。以下是我正在编写的代码:Javascript 从阵列节点进行多个api端点调用,javascript,json,node.js,Javascript,Json,Node.js,从数组调用API端点时遇到问题。该数组包含我需要输入端点的值,以便获取我需要的数据。我遇到的问题是,当我控制台记录来自api调用的数据时,我收到了JSON文本。然而,当我试图解析文本并从JSON文本中获取特定值时,它并没有给出结果。以下是我正在编写的代码: var http = require("http"); var areaCodes = ["'0071950')", "'0072850')", "'0073450')", "'0075700')", "'0076450')", "'0078
var http = require("http");
var areaCodes = ["'0071950')", "'0072850')", "'0073450')", "'0075700')", "'0076450')", "'0078700')", "'0900001')", "'0900000')"];
var results = [];
var encode = [];
//source: http://stackoverflow.com/questions/17811827/get-a-json-via-http-request-in-nodej
for(var i = 0; i < areaCodes.length; i++){
var realmStatus = "http://api.dol.gov/V1/Statistics/OES/OE_SERIES/?KEY=XXXXXXXXXXXXXXXXXXXXXXXXXX&$filter=(OCCUPATION_CODE eq '151131' ) and (AREA_CODE eq " + areaCodes[i];
encode.push(encodeURI(realmStatus));
var options = {
host: 'api.dol.gov',
path: encode[i],
type: 'GET',
dataType: 'json',
headers: {'accept' : 'application/json'}
};
console.log("Start");
var x = http.request(options,function(res){
console.log("Connected");
var str = '';
res.on('data', function(chunk) {
str += chunk;
});
res.on('data',function(data){
if(res.statusCode == 200){
//console.log("res status is good");
try{
var dataA = JSON.parse(str);
//run a for loop
for(var h = 0; h < dataA.d.results.length; h++){
var seriesNum = dataA.d.results[h].SERIES_ID;
array.push(seriesNum);
console.log(seriesNum);
}
//end for
}catch(e){
console.log('Error parsing JSON');
}
}
});
});
x.end();
}//end for loop
var http=require(“http”);
var区域代码=[“'0071950')”、“'0072850')、“'0073450')、“'0075700')、“'0076450')、“'0078700')、“'0900001')、“'0900000')”;
var结果=[];
var encode=[];
//资料来源:http://stackoverflow.com/questions/17811827/get-a-json-via-http-request-in-nodej
对于(变量i=0;i
如果有人愿意解释我是否做错了什么,或者我是否遗漏了什么,我将不胜感激。谢谢!看起来你的第二个
res.on('data')
(带有try…catch
)的应该是res.on('end'))
,在获取整个文件后将触发
查看官方Node.js文档中的示例:。请注意,它们使用res.on('data')
一次和res.on('end')
一次
除此之外,你至少应该马上得到一些分析结果。嘿,谢谢你的快速响应,但是,这不起作用。这很奇怪,因为我对另一个端点使用了相同的代码,而且效果很好。唯一的区别是,在另一个端点中,我没有使用数组存储值来连接端点。pr问题是,当我运行程序时,我得到了“错误解析JSON”这意味着没有执行
try
块。当我调用我的另一个端点时,这不是问题。我认为原因是您在第一个端点之后立即调用第二个'data'
。根据负载的大小,您可能只在一个数据中获得整个JSON(这可能就是其他端点工作的原因),但对于这一个,该负载需要多个数据
调用。但是,您在第一个调用之后调用它,所以您可能只有大约一半的JSON,这就是它抛出错误的原因。有趣的是,它有时会工作,例如,在最初调用几小时后,它不工作,但它给了我结果我想..奇怪的是,这会更符合我所说的。如果有效负载足够小(或足够快),可以在一次数据调用中使用,它就会工作。如果它更大,则必须多次调用('data'),但您的代码会在第一次调用之后尝试解析JSON。