【问题标题】:Json Decode and Parse Error node.js [duplicate]Json解码和解析错误node.js [重复]
【发布时间】:2017-09-03 14:34:58
【问题描述】:

嗨,我正在尝试这样做

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 解析数据时出错,这是 github 的公开 dataset。我不知道我要去哪里错了,任何人都可以帮忙。

【问题讨论】:

  • 你遇到什么样的错误?您是否尝试在解码之前打印出json_string?它是有效的 JSON 吗?
  • 是的,我打印的字符串是正确的。我在位置 571 处收到解析错误意外令牌。即使我将该字符串保存到文件
  • 在解析前使用调试器(如node-inspector)检查json_string 的内容。 (或者在这种情况下,console.log 可能就足够了;通常调试器会更好,您可以更好地了解正在发生的事情。)
  • “是的,我打印的字符串是正确的” 几乎可以肯定不是。 Node 中的 JSON.parse 没有损坏。显示字符串。

标签: javascript json node.js github jzlib


【解决方案1】:

该文件每行包含一个 JSON 对象。仅删除换行符不会产生有效的 single 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));
    ...
  }
});

【讨论】:

    猜你喜欢
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2014-07-17
    • 1970-01-01
    相关资源
    最近更新 更多