JSON.parse适用于数组为零的元素(node.js)

根据文档JSON.parse将第一个参数作为一个string。 我发现了一个意外的行为:

try { const a = JSON.parse([ '{"helloworld": 1}', ]); console.log(a); } catch (ex) { console.error(ex); } 

我期望它失败,因为提供的input参数是一个数组。 相比之下, JSON.parse成功parsing了数组[0]元素并将其输出(在node.js中)。

但是,如果您将数组传递给两个元素,那么JSON.parse将会出错

 try { const b = JSON.parse([ '{"hello": 1}', '{"hello2": 2}', ]); console.log(b); } catch (ex) { console.error(ex); } 

为什么?

JSON.parse是一个需要string的内部JS方法。 但是,如果给出其他types,则会将其转换为string。 对于数组,转换为string是array.join(',')

因此,当有一个元素时,它只会将第一个元素转换为string。 当向JSON.parse提供具有多个元素的数组时,它将错误输出,因为inputJSON将无效。