我有一个Ajax调用,它返回一个JSON编码的数组。当我console.log()
我收到的数据时,我得到了我所期望的 - 一个数组的字符串表示。但是,当我JSON.parse()
此字符串然后尝试console.log()
结果时,我会得到一系列[object Object]
。那是为什么?
代码:
<script type="text/javascript">
function shout(msg) {
console.log(msg);
}
//Ajax call returns string JsonData
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]
我做错了什么?
答案 0 :(得分:2)
您看到此消息“parsedData is [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>
输出如下:
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"}
顺便说一句,我们不再需要在脚本标签中使用type =“text / javascript”属性了。打字少=酷豆!享受:)
答案 1 :(得分:1)
你试过吗
console.log(JSON.stringify(msg))
如果这不起作用,请提供部分服务器端代码,以便我们提供帮助。
答案 2 :(得分:1)
现在它是一个对象,因此您可以像访问任何对象一样访问属性。我不知道你的对象应该是什么,但是你明白了。
for (var i = 0; i < parsedData.length; i++) {
shout(parsedData[i].property1);
shout(parsedData[i].property2);
...
}
答案 3 :(得分:0)
将对象追加到字符串时,它会在对象上调用toString
。例如:
console.log('hey ' + { a: 1 }); // 'hey [object Object]'
如果您想要一个字符串后跟一个实际对象,您可以将该对象作为另一个参数传递给console.log
:
console.log('hey', { a: 1 }); // 'hey' Object {a: 1}