双引号内的JSON报价解析

时间:2018-07-12 08:52:38

标签: javascript json

我的值是一个字符串:

"['Eitaj', 'Jason Json', 'Eitaj M', "Jason Json's"]"

我正在尝试使用JSON.parse()进行解析, 但是,我得到了错误

  

未捕获的SyntaxError:JSON中位置1处的意外令牌'

我发现可以正常工作的字符串是:

JSON.parse('["Eitaj", "Jason Json", "Eitaj M", "Jason Json\'s"]')

除了将单引号和双引号引起来之外,我还有其他技巧吗?

1 个答案:

答案 0 :(得分:2)

检查它是否适合您。

let s = "['Eitaj', 'Jason Json', 'Eitaj M', \"Jason Json's\"]";

let parsed = JSON.parse(s.split(",").map(seg => {
  return seg.replace(new RegExp("'.*'", "g"), function(match) {
    return '"' + match.substring(1, match.length - 1) + '"';
  })
}).join(","));

console.log(parsed);

更新1

这将处理注释中提到的上述片段的缺陷。但是,根据您的要求,还有其他一些极端情况应该处理。

let s = "['Eitaj', 'Jason Json', 'Eitaj M', \"Jason Json's\",\"Test'test'Test\",'Acme, Inc.',\"'Test'\"]";

let parsed = JSON.parse("[" + s.substring(1, s.length - 1).match(new RegExp(`((['\""]).*?(\\2))`, "g")).map(seg => {
  return seg.trim().replace(new RegExp("^'.*'$", "g"), function(match) {
    return '"' + match.substring(1, match.length - 1) + '"';
  })
}).join(",") + "]")

console.log(parsed);