如何使用正则转换 Json 中非字符型的 Key

由于调用第三方API返回的Json不是标准的,如:

{123:321,67:12,"key": "value}

即:纯数字的整型Key没有包裹双引号,导致解析失败。

现在想手动修复一下这个Json,给整型Key加上双引号,如:

{"123":321,"67":12,"key": "value}

请问该如何写?

阅读 2.7k
3 个回答

怎么使用正则实现我不清楚,但这里有一个骚操作,实际使用的时候要确保数据的可信,避免被不怀好意的人攻击

const targetJson = `{123:321,67:12,"key": "value"}`
const r =  eval(`(${targetJson})`)

console.log(r)
/**
{
  "67": 12,
  "123": 321,
  "key": "value"
} 
 */

'{123:321,67:12,"key": "value"}'.replace(/\d+(?=:)/g, '\"$&\"')

零宽先找到":"前的数字,然后replace附加上双引号

'{123:321,67:12,"key": "value}'.replaceAll(/\d+(?=:)/g, '"$&"')

注意 replaceAll 可能有兼容性问题,可以找下 polyfill ,或者多次replace

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏