-1

嗨,我正在尝试这样做

const request = require('request');
const zlib = require('zlib');
const opts = {
    uri: 'http://data.githubarchive.org/2015-01-01-15.json.gz',
    encoding: null,
};

request.get(opts, function(error, response, body) {
    if (!error) {
        zlib.gunzip(body, function(err, decoded) {
            if (err) {
                console.log(err)
            } else {
                var json_string = decoded.toString('utf-8').replace(/(\r\n|\n|\r)/gm, " ").trim();
                var json = JSON.parse(json_string);
                console.log("SJON", typeof json)
            }
        });
    }
});

我正在按照以下步骤操作:

  1. 从 url 获取数据
  2. 使用zlib.gunzip解压
  3. 将解码后的数据转换为字符串
  4. 替换所有换行符和喙语句
  5. 我正在尝试解析引发错误的字符串

我在使用 解析数据时遇到错误JSON.parse,这是githubdataset的公开内容。我不知道我要去哪里错了,任何人都可以帮忙。

4

1 回答 1

3

该文件每行包含一个 JSON 对象。仅删除换行符不会产生有效的单个JSON 对象。相反,您可以在换行符上拆分输入数据,并分别解析每一行:

zlib.gunzip(body, function(err, decoded) {
  if (err) {
    console.log(err);
  } else {
    let array = decoded.toString().trim().split(/\r?\n/).map(line => JSON.parse(line));
    ...
  }
});
于 2017-04-08T07:07:30.980 回答