我有一个日志文件,其中包含用console.log打印的几个对象。我用regexp制作了类似JSON的字符串,现在我需要以某种方式解析它们。对象字符串可能类似于
{ id: 2922, valid: true, filled: true, data: [ '1-a', '2-c' ] }
JSON.parse在这里不起作用,因为未引用键。关于如何解析的任何想法?
UPD:尝试了eval(str)
,但收到了错误消息
const str = "{ id: 2922, valid: true, filled: true, data: [ '1-a', '2- c' ] } ";
const obj = eval(str);
console.log(obj);
错误是:
undefined:1
{ id: 2922, valid: true, filled: true, data: [ '1-a', '2-c' ] }
^
SyntaxError: Unexpected token :
at Object.<anonymous> (C:\Clouds\Git\career-pulse-fix-from-logs\b.js:2:18)
答案 0 :(得分:2)
由于这不是有效的JSON,因此这是有效的JS。因此,您可以通过js's eval()
function进行解析,以获取js表达式并返回其结果。喜欢:
const str = "{ id: 2922, valid: true, filled: true, data: ['1-a', '2- c'] }";
const obj = eval('(' + str + ')');
console.log(obj);
答案 1 :(得分:1)
您可以使用var json = str.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:([^\/])/g, '"$2":$4');
(here)为密钥添加引号,但是 data
字段的值仍未写在JSON语法。
编辑 该脚本看起来可以工作!
var str = "{ id: 2922, valid: true, filled: true, data: [ '1-a', '2-c' ] } ";
var json = str.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:([^\/])/g, '"$2":$4');
json = json.replace(/'/g, '"');
console.log(JSON.parse(json));