Javascript console.log生成[object]结果

Javascript console.log生成[object]结果,javascript,json,ajax,Javascript,Json,Ajax,我有一个Ajax调用,它返回一个JSON编码的数组。当我console.log()接收到数据时,我得到的正是我所期望的——数组的字符串表示。但是,当我JSON.parse()这个字符串,然后尝试console.log()结果时,我会得到一系列[object object]。为什么呢 代码: 功能呼叫(msg){ 控制台日志(msg); } //Ajax调用返回字符串JsonData 呼喊(“jsonData是”+jsonData)//生成数组的字符串表示形式 var parsedData=JS

我有一个Ajax调用,它返回一个JSON编码的数组。当我
console.log()
接收到数据时,我得到的正是我所期望的——数组的字符串表示。但是,当我
JSON.parse()
这个字符串,然后尝试
console.log()
结果时,我会得到一系列
[object object]
。为什么呢

代码:


功能呼叫(msg){
控制台日志(msg);
}
//Ajax调用返回字符串JsonData
呼喊(“jsonData是”+jsonData)//生成数组的字符串表示形式
var parsedData=JSON.parse(jsonData);
呼喊(“parsedData是”+parsedData)//生成一系列[对象]
我做错了什么?

你试过了吗

console.log(JSON.stringify(msg))

如果这不起作用,请提供部分服务器端代码,以便我们提供帮助。

它现在是一个对象,因此您可以像访问任何对象一样访问属性。我不知道你的目标应该是什么,但你明白了

for (var i = 0; i < parsedData.length; i++) {
    shout(parsedData[i].property1);
    shout(parsedData[i].property2);
    ...
}
for(变量i=0;i
将对象附加到字符串时,它会调用对象上的字符串
toString
。例如:

console.log('hey ' + { a: 1 }); // 'hey [object Object]'
如果希望字符串后跟实际对象,可以将该对象作为另一个参数传递给
控制台。log

console.log('hey', { a: 1 }); // 'hey' Object {a: 1}

您看到此消息“parseddatais[object object]”的原因是JavaScript在将对象附加到该字符串之前,先将该字符串连接起来,然后再将该对象转换为单个连接字符串。它将对象强制转换为对象类型的字符串,但正如您所知,它不会显示对象的内容。如果没有JSON.stringify(),则无法使用Console.log以这种方式呈现字符串+对象

要使代码正常工作,请尝试以下操作:

shout("parsedData is " + JSON.stringify(parsedData));
以下是它的工作原理:

<script>
  function shout(msg) {
    console.log(msg);
  }

  //Ajax call returns string JsonData
  var jsonData = '{"a":"abc","b":"cool beans","c":"xyz"}';

  shout("jsonData is " + jsonData); //Produces the string-representation of my array
  var parsedData = JSON.parse(jsonData);
  shout("parsedData is " + parsedData); //Produces a series of [object Object]
  shout("JSON.stringify(parsedData) is " + JSON.stringify(parsedData));

  // The JSON.stringify function, essentially does this:
  var output = '{';
  for (var key in parsedData) {
    output += '"' + key + '":"' + parsedData[key] + '",';
  }
  output += '}';
  output = output.replace(',}','}');
  shout("output is " + output);
</script>

顺便说一句,我们不再需要在脚本标记中使用type=“text/javascript”属性。少打字=酷豆!享受:)

您解析的JSON包含对象,它们有一个字符串表示形式
[object object]
--请尝试
console.log([{},{}]+“”)来了解我的意思。因为它不再是字符串,现在是一个对象文本。@evantimboli只是一个对象。@evantimboli-对象文本是一个语言构造,不是运行时实体。你的评论毫无意义啊,好吧。我希望
console.log()
能像php中的
var\u dump()
那样运行。我想我错了…:-)这并不能回答这个问题。一旦你有足够的钱,你将能够;相反@是的。如果将其改写为“尝试使用
JSON.stringify
记录”,则毫无疑问,这是一个答案。此类答案的问题在于,它通常更多地是一个清单项目,而不是一个明确的答案。相反,如果你在评论中对此作出回应,结果证明这是解决方案,那么你可以提供它作为答案。看到你的名声阻止你发表评论,我能理解这是一个问题。一个明确的答案是使用建议的解决方案在代码片段中找到一个有效的解决方案,而不是“试试这个”,看看我们走了多远。@BennyBottema如果这不是发布的正确方式,我很抱歉。我只是想帮忙,因为我已经多次遇到这个问题,我就是这样解决的。我真的相信我的答案是正确的,但我猜提问者的感觉不一样。
<script>
  function shout(msg) {
    console.log(msg);
  }

  //Ajax call returns string JsonData
  var jsonData = '{"a":"abc","b":"cool beans","c":"xyz"}';

  shout("jsonData is " + jsonData); //Produces the string-representation of my array
  var parsedData = JSON.parse(jsonData);
  shout("parsedData is " + parsedData); //Produces a series of [object Object]
  shout("JSON.stringify(parsedData) is " + JSON.stringify(parsedData));

  // The JSON.stringify function, essentially does this:
  var output = '{';
  for (var key in parsedData) {
    output += '"' + key + '":"' + parsedData[key] + '",';
  }
  output += '}';
  output = output.replace(',}','}');
  shout("output is " + output);
</script>
jsonData is {"a":"abc","b":"cool beans","c":"xyz"}
parsedData is [object Object]
JSON.stringify(parsedData) is {"a":"abc","b":"cool beans","c":"xyz"}
output is {"a":"abc","b":"cool beans","c":"xyz"}