Node.js-为什么JSON.parse混淆响应主体中的对象?

时间:2019-04-20 20:14:10

标签: javascript node.js json

当我使用JSON.parse并通过require模块注销一些获取的数据时,嵌套对象将被记录[Object]。这是一个示例(当前使用Node版本10.15):

const request = require("request");

const url = "https://www.reddit.com/r/javascript.json";

request(url, (error, response) => {
  const data = JSON.parse(response.body);
  console.log(data)
});

{ kind: 'Listing',
  data:
   { modhash: '',
     dist: 26,
     children:
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object] ],
     after: 't3_bf4cl6',
     before: null } }

我在看这个问题:JSON.parse returns [object] from JSON

问的人很好奇,为什么在JSON.parse之后,对象被记录为[Object]。最高答案指出JSON.parse隐藏数据的原因是为了提高可读性。但是答案并不能说明一种替代默认行为的方法。

如何获取JSON.parse记录完整数据?有没有办法覆盖默认行为?

2 个答案:

答案 0 :(得分:5)

如果直接记录response.body的格式没有达到您喜欢的格式,这就是为什么要进行JSON.parse的原因,那么记录完整格式的对象 console.log(JSON.stringify(JSON.parse(response.body), null, 2))

答案 1 :(得分:2)

那不是JSON.parse,而是console.log对嵌套对象的默认行为。您可以使用节点的T进行深度记录

util.inspect

或作为功能

const {inspect} = require('util');
console.log(inspect(obj, false, null, true));