这段代码为什么错了?

我想把一段JSON数据按每个键值一个个打印出来,应该怎么改?

var o = {
  "ad": "gch",
  "bd": "123"
};
var m = o.toString();
var tasks = JSON.parse(m);
for (var i in tasks) {
  console.log(tasks[i]);
}
undefined:1
[object Object]
 ^
SyntaxError: Unexpected token o
    at Object.parse (native)
    at Object.<anonymous> (/Users/guchenghao/Atom-code/program/javascript/test.js:6:18)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:136:18)
阅读 3.5k
4 个回答

我知道楼主是想把一个对象变为字符串,然后再把它变为对象,正常的思路是使用

JSON.stringify();
JSON.parse()

但是,tonString方法不是也可以返回字符串吗,楼主就采用了toString,可能是犀牛书上关于它讲得太多了,关于toString为何不对,请看链接描述
所以楼主的改为:

var o = {
  "ad": "gch",
  "bd": "123"
};
var m = JSON.stringify(o);
var tasks = JSON.parse(m);
for (var i in tasks) {
  console.log(tasks[i]);
}

事实上,把对象转变为字符串,最简单的好像还就是JSON.stringify()

因为o.toString 结果为
'[object Object]'
它不是一个合法的JSON格式的字符串,JSON.parse自然就出错~~
上面代码怎么做的目的是?

想把键值打印出来,这样就好~~

var o = {
  "ad": "gch",
  "bd": "123"
};
for (var i in o) {
  console.log(o[i]);
}

o.toString()返回的不是json

你一定要这么做的话,那么就把

var m = o.toString();

改成

var m = JSON.stringify(o);

就可以了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题