该错误的原因是 在使用JSON.parse进行转换时传入了错误类型的值 JSON.parse("对象") 只能传入字符串包裹对象(例如:"{}","[]")的值
关于 JSON.stringify 和 JSON.parse
- JSON 本身就是对象,与JavaScript的用法基本相同只不过写法略有不同。写法 可以就把其当作JavaScript对象看待。
-
JSON.stringify 把对象(不管是JavaScript还是JSON对象)转换为字符串。
JSON.stringify({num:1}) '{"num":1}'' JSON.stringify({"num":1}) '{"num":1}''
- JSON.parse 把字符串转回对象(传参一定是引号包裹对象的格式不然会报错)。
关于接口传参
当 content-type 为 application/json时 不管是get请求还是post请求都会将对象格式的参数序列化。
假如前端要传递给后台的参数为{"id1":1,"id2":2,"id3":3}。那么get将使用类似于qs.stringify()序列化方式将参数序列化为"id1=1&id2=2&id3=3",post方式会使用JSON.stringify()将参数序列化为'{"id1":1,"id2":2,"id3":3}'。
这时候假设后台要返回的数据为'{"name":"小王","age":17}',那么前端接收时将会被JSON.parse() 反序列化为{"name":"小王","age":17}。
由此可见前后端数据交互格式大多为字符串,只不过经过请求和响应的转换,呈现给前后端不同格式,这样有助于数据统一和识别也有助于后续操作。
当然 JSON.stringify()和JSON.parse()也能让你快速实现深拷贝。