如何从JS中的字符串解析对象(它是控制台记录的)?

时间:2018-08-13 08:53:40

标签: javascript

我有一个日志文件,其中包含用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)

2 个答案:

答案 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));