这是一段代码片段,它让我陷入困境:
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)
答案 0 :(得分:3)
第一次使用console.log时,它表示字符串值以"
开头和结尾。
第二次,它没有这么说。
您有一个JSON文本的字符串表示形式,它本身由一个JSON文本的字符串表示形式组成,该文本是一个数组。
解析它之后,你有一个JSON文本的字符串表示形式,它是一个数组。
即。你的数组是 double 字符串化,所以你需要解析它两次(或者修改一下编码它的所有东西,所以只做一次)。