如何在Node JS中打印对象

时间:2016-08-04 13:22:11

标签: javascript json node.js

在下面的代码中(在Node JS上运行)我试图使用JSON.stringify打印从外部API获取的对象,这会导致错误:

  

TypeError:将循环结构转换为JSON

我已经查看了有关此主题的问题,但没有人可以提供帮助。有人可以建议:

a)如何从country对象中获取res值?

b)我如何打印整个对象本身?

  http.get('http://ip-api.com/json', (res) => {     
    console.log(`Got response: ${res.statusCode}`);
    console.log(res.country)  // *** Results in Undefined
    console.log(JSON.stringify(res)); // *** Resulting in a TypeError: Converting circular structure to JSON

    res.resume();
  }).on('error', (e) => {
    console.log(`Got error: ${e.message}`);
  });

7 个答案:

答案 0 :(得分:13)

基本console.log不会通过冗长而复杂的对象,而是可能决定只打印[Object]

在node.js中阻止它的一个好方法是使用util.inspect

'use strict';
const util = require('util'),
    obj = /*Long and complex object*/;

console.log(util.inspect(obj, {depth: null}));
//depth: null tell util.inspect to open everything until it get to a circular reference, the result can be quite long however.

编辑:在收缩中(例如在REPL中),第二个选项是JSON.stringify。不需要require它,但它会打破循环引用而不是打印存在引用的事实。

答案 1 :(得分:3)

通过使用http request客户端,我可以打印JSON对象以及打印country值。以下是我更新的代码。

var request = require('request');
request('http://ip-api.com/json', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(response.body);    // Prints the JSON object
    var object = JSON.parse(body);
    console.log(object['country']) // Prints the country value from the JSON object
  }
});

答案 2 :(得分:2)

打印整个对象,它不会出现递归引用的问题:

console.log(res);

以下是一个示例,供您查看console.log如何处理循环引用:

> var q = {a:0, b:0}
> q.b = q
> console.log(q)
{ a: 0, b: [Circular] }

另外,我建议您检查一下您实际接收的数据。

答案 3 :(得分:0)

您实际上并未在res中获取数据。您需要on('data')on.('end')

body是一个字符串。它会附加到收到的数据上,因此在完成后您需要将数据解析为json

http.get("http://ip-api.com/json", function(res) {
    var body = '';
    res.on('data', function(data){
        body = body + data;
    });

    res.on('end', function() {
        var parsed = {};  
        try{
            parsed = JSON.parse(body); // i have checked its working correctly
        }
        catch(er){
            //do nothing it is already json
        }
        console.log(parsed.country);
    });
});

来自parsed的Noe是一个json对象,你可以获得任何属性

答案 4 :(得分:0)

您可以将两个参数传递给console.log()

安装“yargs”后尝试此代码并打印整个对象

console.log('object is',yargs.argv);

我想可能会帮助你打印整个对象:)

答案 5 :(得分:0)

这可以以最简单的方式打印对象的键和对象的值。试试吧。

const jsonObj = {
  a: 'somestring',
  b: 42,
  c: false
};

Array.from(Object.keys(jsonObj)).forEach(function(key){
  console.log(key + ":" + jsonObj[key]);
});

答案 6 :(得分:0)

在 2021 年,我只是使用打印

app.post("/",(req,res) => {
    console.log("HI "+JSON.stringify(req.body));
    res.send("Hi")
});

并得到我的输出为 HI {"Hi":"Hi"}

我发送了

{
    "Hi": "Hi"
}

作为我的帖子请求正文。

只在控制台上执行 console.log(req.body) 打印 [object Object],但现在可以了。