这是一个让我陷入困境的代码片段:
var _tids = [];
console.log("type:", typeof user._imported_readTids, "value:", user._imported_readTids);
try {
_tids = JSON.parse(user._imported_readTids);
} catch(e) {
return nxt();
}
console.log("user:", user.uid, "type:", typeof _tids, "\narray:", _tids);
在第一个 console.log
中,字段 _imported_readTids 的类型是字符串,这是预期的(数组的字符串表示形式,如 "[1,2,3] “
(元素之间没有空格))
当我对该字符串调用 JSON.parse 时,我希望它会转换为数组,但在第二个 console.log
上,类型仍然是字符串,并且数组表示看起来是一样的。
这是输出:
// first console.log (truncated for brevity):
type: string value: "[4,5,6,7,8,...,234]"
// second:
user: 1 type: string
array: [4,5,6,7,8,...,234]
我已经尝试过这些相同的参数并在控制台 Nodejs 进程中使用,结果如预期,typeof jsonArray
将返回'object'
。
这是在 NodeJS,v0.12.5,OSX 10.11.1 (El Capitan) 中
最佳答案
第一次使用 console.log 时,它显示字符串值以 "
开头和结尾。 .
第二次,它没有这么说。
您有一个 JSON 文本的字符串表示形式,它本身由 JSON 文本的字符串表示形式组成,该文本是一个数组。
解析它后,您将获得 JSON 文本的字符串表示形式,它是一个数组。
即您的数组是 double 字符串化的,因此您需要解析它两次(或者修复首先对其进行编码的任何内容,以便它只执行一次)。
关于javascript - JSON.parse 不会解析数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34586415/