循环遍历URL并将数据存储在json文件中

时间:2017-10-11 23:19:44

标签: json

我有以下代码从URL读取XML主体并将其另存为.json文件。

 var parseString = require('xml2js').parseString;
    var http = require('http');
    var fs = require('fs');

    var url = "http://vhost11.lnu.se:20090/assig2/index.php?table=User&id=1"
    function xmlToJson(url, callback) {
      var req = http.get(url, function(res) {
        var xml = '';

        res.on('data', function(chunk) {
          xml += chunk;
        });

        res.on('error', function(e) {
          callback(e, null);
        }); 

        res.on('timeout', function(e) {
          callback(e, null);
        }); 

        res.on('end', function() {
          parseString(xml, function(err, result) {
            callback(null, result);
          });
        });
      });
    }



    xmlToJson(url, function(err, data) {
      if (err) {
        // Handle this however you like
        return console.err(err);
      }

      fs.writeFile("./users.json", JSON.stringify(data, null, 4), (err) => {
        if (err) {
            console.error(err);
            return;
        };

    });


    })

这很有效。现在我必须通过递增' id ="来浏览几个网址。网址的一部分,' id = 1"," id = 2"," id = 3"等,并将所有数据保存在同一个json文件中。

http://vhost11.lnu.se:20090/assig2/index.php?table=User&id=1

我该怎么做?

1 个答案:

答案 0 :(得分:0)

实际上非常简单



var parseString = require('xml2js').parseString;
    var http = require('http');
    var fs = require('fs');
    var url = "http://vhost11.lnu.se:20090/assig2/index.php?table=User&id="
    function xmlToJson(url,id, callback) {
      var req = http.get(url+id, function(res) {
        var xml = '';

        res.on('data', function(chunk) {
          xml += chunk;
        });

        res.on('error', function(e) {
          callback(e, null);
        }); 

        res.on('timeout', function(e) {
          callback(e, null);
        }); 

        res.on('end', function() {
          parseString(xml, function(err, result) {
            callback(null, result);
          });
        });
      });
    }



    for(var i = 1 i<=10;i++){
      xmlToJson(url,i, function(err, data) {
      if (err) {
        // Handle this however you like
        return console.err(err);
      }
      var jsoncontent = fs.readFileSync("./users.json").toString();
      fs.writeFile("./users.json", jsoncontent+"\n"+JSON.stringify(data, null, 4), (err) => {
        if (err) {
            console.error(err);
            return;
        };

    });
    }


    })
&#13;
&#13;
&#13;

你可以看到在url的末尾我删除了id号,在xmltojson函数中我添加了一个id参数,所以现在该函数可以在循环中使用,所以可以获取很多id或者你可以只是插入一个特定的id来获取xml。还要注意我在写入之前读取了json文件,以便我可以获取已经存在的内容并添加到其中