请教一个字符串转数组的问题?

新手上路,请多包涵

有这样一段字符串

'[{"name":"group3.jpg","status":"done","thumbUrl":"http:\/\/duihuanka.125keji.com\/Upload\/topic\/20220520\\4dff05c65e7ea5aa353cfa478d4740dd.jpg","url":"http:\/\/duihuanka.125keji.com\/Upload\/topic\/20220520\\4dff05c65e7ea5aa353cfa478d4740dd.jpg","uid":"__AUTO__1653040907122_0__"}]'

怎么转成正常数组格式呢,JSON.parse直接报错

阅读 3k
5 个回答
eval('(' + str + ')');

let data = (new Function("return " + str))();

原因是字符串字面量的一次转义(如 \/)在生成字符串的时候已经用掉了,所以字符串里的 \\ 被转义成了 \,而作为 JSON 字符串的时候,它和后面的 \4 被认为是一个转义,但这个转义不正确,所以报错。

解决办法楼上已经给出来了,两种都可以。但我认为应该在生成这个字符串的地方去解决问题,因为它从逻辑上说确实不是有一个有效的 JSON。

  • 如果是程序生成的,建议生成程序使用现成的 JSON 库来来生,避免手工拼接
  • 如果是手写的,手工把 \\ 替换成 \\\\

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

var result = new Function('return ' + '[{"name":"group3.jpg","status":"done","thumbUrl":"http:\/\/duihuanka.125keji.com\/Upload\/topic\/20220520\\4dff05c65e7ea5aa353cfa478d4740dd.jpg","url":"http:\/\/duihuanka.125keji.com\/Upload\/topic\/20220520\\4dff05c65e7ea5aa353cfa478d4740dd.jpg","uid":"__AUTO__1653040907122_0__"}]')()

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题